- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 ASP.NET 中扩展了标准的 GridView 控件。基本上是一样的,但是分页和排序是使用回调完成的。
我已成功创建自己的 PagerTemplate,但它仅在 PagerSettings.Position 设置为 Top 时有效。我想在顶部和底部都有寻呼机。
我收到一个 HttpException 消息:表格必须包含按页眉、正文和页脚顺序排列的行部分。
有人知道这是什么吗?
我已经尝试调用 MakeAccessible() 方法,但这没有帮助。
代码:
private int _IdColumnIndex = -1;
public override object DataSource
{
get
{
return HttpContext.Current.Session[this.ClientID + "_DataSource"];
}
set
{
if (!value.GetType().Equals(typeof(DataView)))
throw new ArgumentException("Only System.Data.DataView is accepted as a DataSource for DataGridView!");
HttpContext.Current.Session[this.ClientID + "_DataSource"] = value;
}
}
/// <summary>
/// Sets the default settings.
/// </summary>
private void SetDefaultSettings()
{
base.AllowPaging = true;
base.AllowSorting = true;
base.ShowHeader = true;
base.ShowFooter = true;
base.PagerTemplate = new GridPagerTemplate(PAGER_ID, this);
base.PagerSettings.Position = PagerPosition.TopAndBottom;
base.PageSize = 10;
AddSelectionCheckbox();
}
//private void MakeAccessible()
//{
// if (this.Rows.Count > 0)
// {
// //This replaces <td> with <th> and adds the scope attribute
// this.UseAccessibleHeader = true;
// //This will add the <thead> and <tbody> elements
// this.HeaderRow.TableSection = TableRowSection.TableHeader;
// //This adds the <tfoot> element. Remove if you don't have a footer row
// this.FooterRow.TableSection = TableRowSection.TableFooter;
// }
//}
private void AddSelectionCheckbox()
{
TemplateField tf = new TemplateField();
tf.HeaderText = "";
tf.ItemTemplate = new CheckboxTemplate(ROW_CHECKBOX_ID);
base.Columns.Add(tf);
}
protected override void OnInit(EventArgs e)
{
SetDefaultSettings();
base.DataBound += new EventHandler(DataGridView_DataBound);
base.RowDataBound += new GridViewRowEventHandler(DataGridView_RowDataBound);
base.OnInit(e);
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
//this.PaintRows();
//this.FormatCells();
// Get JavaScript for this DataGridView, and include it on the page.
string scriptUrl = Page.ClientScript.GetWebResourceUrl(this.GetType(), "Yakinix.UI.Controls.DataGridView.js");
Page.ClientScript.RegisterClientScriptInclude("DataGridView", scriptUrl);
string js = "function DGV_MakeCallback(argument)" +
"{" +
"__theFormPostData = '';" +
"__theFormPostCollection = new Array();" +
"WebForm_InitCallback();" +
GetCallbackEventReference("DGV_Callback") +
";}";
Page.ClientScript.RegisterClientScriptBlock(typeof(DataGridView), typeof(DataGridView).FullName + "DGV_MakeCallback", js, true);
if (this.HeaderRow != null)
this.HeaderRow.TableSection = TableRowSection.TableHeader;
}
private string GetCallbackEventReference(string func)
{
string callbackEventReference = Page.ClientScript.GetCallbackEventReference(this, "argument", func, "'" + ClientID + "'", false);
return callbackEventReference;
}
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.RenderBeginTag(HtmlTextWriterTag.Div); // <div>
base.RenderBeginTag(writer);
}
public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag(writer);
writer.RenderEndTag(); // </div>
}
/// <summary>
/// Renders the gridview control and strips whitespace. It also
/// applies the right formatting.
/// </summary>
public string RenderHtml()
{
using (StringWriter sw = new StringWriter(CultureInfo.InvariantCulture))
{
//this.PaintRows();
//this.FormatCells();
if (this.HeaderRow != null)
this.HeaderRow.TableSection = TableRowSection.TableHeader;
this.UseAccessibleHeader = true;
this.RenderControl(new HtmlTextWriter(sw));
string html = sw.ToString();
return html;
}
}
// TODO: Style all rows for the column matching current SortExpression.
protected void DataGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
//DataGridView gridView = (DataGridView)sender;
//if (gridView.SortExpression.Length > 0)
//{
// int cellIndex = -1;
// // find the column index for the corresponding sort expression
// foreach (DataControlField field in gridView.Columns)
// {
// if (field.SortExpression == gridView.SortExpression)
// {
// cellIndex = gridView.Columns.IndexOf(field);
// break;
// }
// }
// if (cellIndex > -1)
// {
// if (e.Row.RowType == DataControlRowType.Header)
// {
// // this is a header row,
// // set the sort style
// e.Row.Cells[cellIndex].CssClass += (gridView.SortDirection == SortDirection.Ascending ? " sortascheader" : " sortdescheader");
// }
// else if (e.Row.RowType == DataControlRowType.DataRow)
// {
// // this is a data row
// e.Row.Cells[cellIndex].CssClass += (e.Row.RowIndex % 2 == 0 ? " sortaltrow" : "sortrow");
// }
// }
//}
RenderDetailsRow(e);
}
/// <summary>
/// Renders the details row, which is hidden when rendered. Clicking a details link, displays the row and more detailed data is shown, and is editable.
/// </summary>
/// <param name="e">The <see cref="System.Web.UI.WebControls.GridViewRowEventArgs"/> instance containing the event data.</param>
private void RenderDetailsRow(GridViewRowEventArgs e)
{
// Only add a details row to DataRows
if (false && e.Row.RowType == DataControlRowType.DataRow)
{
Table table = e.Row.Parent as Table;
if (table != null)
{
GridViewRow row = new GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal);
row.Style[HtmlTextWriterStyle.Display] = "none";
TableCell rowCell = new TableCell();
rowCell.ColumnSpan = this.Columns.Count;
rowCell.Height = new Unit(100);
row.Cells.Add(rowCell);
table.Rows.Add(row);
HtmlAnchor htmlAhref = new HtmlAnchor();
htmlAhref.HRef = "javascript:void(0);";
htmlAhref.Attributes.Add("onclick", "ToggleElement('" + row.ClientID + "');");
htmlAhref.InnerText = "Test";
e.Row.Cells[e.Row.Cells.Count - 1].Controls.Add(htmlAhref);
}
}
}
protected void DataGridView_DataBound(object sender, EventArgs e)
{
FillPagerDetails(base.TopPagerRow);
FillPagerDetails(base.BottomPagerRow);
}
private void FillPagerDetails(GridViewRow pagerRow)
{
if (pagerRow != null)
{
// Retrieve the DropDownList and Label controls from the row.
DropDownList pageList = pagerRow.Cells[0].FindControl(PAGER_ID) as DropDownList;
if (pageList != null)
{
pageList.Attributes.Add("onchange", "DataGridViewPage(this.value, '" + ClientID + "');");
// Add the number of pages to the ListBox
for (int i = 0; i < base.PageCount; i++)
{
int pageNumber = i + 1;
// Create a ListItem that represents a page
ListItem item = new ListItem(String.Format("{0}", pageNumber), i.ToString());
// If the page is already selected, make sure the
// ListBox select the selected page
if (i == base.PageIndex)
item.Selected = true;
// Add the ListItem object to the Items collection of the DropDownList.
pageList.Items.Add(item);
}
}
}
}
protected override void InitializeRow(GridViewRow row, DataControlField[] fields)
{
base.InitializeRow(row, fields);
if (row.RowType == DataControlRowType.Header)
{
for (int i = 0; i < row.Cells.Count; i++)
{
row.Cells[i].Controls.Clear();
if (row.Cells[i].Text.Equals("CHKCOL", StringComparison.Ordinal))
{
CheckBox chkSelectAll = new CheckBox();
chkSelectAll.ID = "chkSelectAllRows";
row.Cells[i].Controls.Add(chkSelectAll);
}
else
{
row.Cells[i].Text = String.Format(CultureInfo.InvariantCulture, "<a href=\"javaScript:DataGridViewSort('{0}', '{2}');void(0)\" title=\"{1}\">{1}</a>", fields[i].SortExpression, fields[i].HeaderText, this.ClientID);
}
}
//if (ViewState["SortExpression"] != null)
//{
// int index;
// index = 0;// GetHeaderCellIndex(ViewState["SortExpression"].ToString());
// if (index != -1)
// {
// //Literal literal;
// //if ((SortDirection)ViewState["SortDirection"] == SortDirection.Ascending)
// //{
// // if (string.IsNullOrEmpty(SortAscendingImageUrl))
// // {
// // literal = new Literal();
// // literal.Text = "↑";
// // row.Cells[index].Controls.Add(literal);
// // }
// // else
// // {
// // sortImage.ImageUrl = SortAscendingImageUrl;
// // row.Cells[index].Controls.Add(sortImage);
// // }
// //}
// //else
// //{
// // if (string.IsNullOrEmpty(SortDescendingImageUrl))
// // {
// // literal = new Literal();
// // literal.Text = "↓";
// // row.Cells[index].Controls.Add(literal);
// // }
// // else
// // {
// // sortImage.ImageUrl = SortDescendingImageUrl;
// // row.Cells[index].Controls.Add(sortImage);
// // }
// //}
// }
//}
}
else if (row.RowType == DataControlRowType.DataRow)
{
for (int i = 0; i < row.Cells.Count; i++)
{
if (fields[i].HeaderText.Equals("id", StringComparison.InvariantCultureIgnoreCase))
{
_IdColumnIndex = i;
break;
}
}
}
}
protected override void OnRowCreated(GridViewRowEventArgs e)
{
base.OnRowCreated(e);
if (e.Row.RowType == DataControlRowType.Header)
{
//HtmlImage img = new HtmlImage();
//img.ID = "lbCheckAll";
//img.Src = "/img/btn_slct_all.gif";
//img.Alt = "Select all";
//img.Attributes.Add("onclick", "SelectAllRows('" + this.ClientID + "',true);return false;");
//e.Row.Cells[0].Controls.Add(img);
}
else if (e.Row.RowType == DataControlRowType.DataRow)
{
//AddCheckbox(e);
}
else if (e.Row.RowType == DataControlRowType.Footer)
{
//e.Row.Cells[0].Text = "sdsds";
}
}
protected override void OnRowDataBound(GridViewRowEventArgs e)
{
base.OnRowDataBound(e);
if (e.Row.RowType == DataControlRowType.DataRow)
{
//AddCheckbox(e);
if (_IdColumnIndex != -1)
e.Row.Cells[_IdColumnIndex].Text = "<a href=\"Details.aspx?id=" + e.Row.Cells[_IdColumnIndex].Text + "\">Edit</a>";
}
}
public override void Sort(string sortExpression, SortDirection sortDirection)
{
DataView dv = this.DataSource as DataView;
if (dv != null)
{
dv.Sort = sortExpression + " " + (sortDirection == SortDirection.Ascending ? "ASC" : "DESC");
}
}
#region ICallbackEventHandler Members
private string callbackArg = String.Empty;
string ICallbackEventHandler.GetCallbackResult()
{
// Save state with PageStatePersister and place it to Page.ClientState
System.Reflection.MethodInfo mi = typeof(Page).GetMethod("SaveAllState", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
mi.Invoke(this.Page, null);
// Get serialized viewstate from Page's ClientState
System.Reflection.PropertyInfo stateProp = typeof(Page).GetProperty("ClientState", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
string state = stateProp.GetValue(this.Page, null).ToString();
return callbackArg + "¤#¤" + state;
}
void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
{
try
{
// Load XML from client
XmlDocument doc = new XmlDocument();
doc.LoadXml(eventArgument.Replace("&", "&"));
string pagerId = String.Empty;
if (doc.DocumentElement.Name == "callback")
{
string gridId = doc.DocumentElement["arguments"]["gridId"].InnerText;
switch (doc.DocumentElement["action"].InnerText)
{
case "sort":
string sortExpression = doc.DocumentElement["arguments"]["sortExpression"].InnerText;
Sort(sortExpression.Split(' ')[0].Trim(), sortExpression.Split(' ')[1].Trim().Equals("ASC") ? SortDirection.Ascending : SortDirection.Descending);
break;
case "page":
string pageIndex = doc.DocumentElement["arguments"]["pageIndex"].InnerText;
this.PageIndex = Convert.ToInt32(pageIndex);
pagerId = base.BottomPagerRow.Cells[0].FindControl(PAGER_ID).ClientID;
break;
case "search":
break;
}
this.DataBind();
callbackArg = String.Format("{0}¤|¤{1}¤|¤{2}", gridId, this.RenderHtml(), pagerId);
}
doc = null;
}
catch (Exception ex)
{
callbackArg = String.Format(AJAX_ERROR_FORMAT, ex.Message + "\n\n" + ex.StackTrace);
}
finally
{
if (callbackArg.Equals(string.Empty))
{
callbackArg = String.Format(AJAX_ERROR_FORMAT, "An AJAX Error occurred!");
}
}
}
#endregion
最佳答案
这对我有用。必须将 PagerRows 设置到它们适当的部分。
我从 http://www.codeproject.com/Members/iguigova?msg=3153516(搜索 MakeAccessible)
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if (Rows.Count > 0)
{
UseAccessibleHeader = true;
HeaderRow.TableSection = TableRowSection.TableHeader;
FooterRow.TableSection = TableRowSection.TableFooter;
}
if (TopPagerRow != null)
{
TopPagerRow.TableSection = TableRowSection.TableHeader;
}
if (BottomPagerRow != null)
{
BottomPagerRow.TableSection = TableRowSection.TableFooter;
}
}
关于asp.net - 带有寻呼机 TopAndBottom 的 GridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/431413/
我需要能够垂直翻转一组图像。我看过使用 ViewPager,但它似乎只支持水平分页。 我也查看了 Gallery,但我也没有看到垂直分页的方法。无论如何,它已被弃用,取而代之的是 Horizont
我正在使用寻呼机中内置的 View ,并且希望有一个“显示全部”选项。即显示全部 第 2 页,共 10 页。 实现这一目标的最佳方法是什么? 史蒂夫 最佳答案 史蒂文,您可以克隆您的实际显示,然后在
当我使用 vim 编辑 Markdown 文件时,我有很好的语法着色(通过 vim-markdown 和 vim-markdown-preview 插件)。 当我使用 less(寻呼机)查看文件时,我
在我的 Android 应用程序中,我已经能够在一段时间后自动滚动查看寻呼机。我找不到显示滚动发生前剩余时间的寻呼机指示器。 我在下面附上了一个网站的屏幕截图,以了解我想要实现的目标。 如果您可以共享
当您编写的每个代码都立即运行并且您未按时完成计划时,您是否知道这种感觉:-P 就像'哦,是的,现在我有时间让它变得完美'。这就是我现在的位置^^ 所以我用 JSF (ui:repeat) 实现了一个转
我在 Android 应用程序中有一个项目列表,我希望每个项目都在一个页面上。问题是每个项目都设置了一个带有 imageview 的布局,它从一个唯一的 url 下载它的图像。这有可能实现吗?如何实现
我想同步两个 View 寻呼机之间的触摸事件。我已经试过了,但没有发现任何效果。 viewPager.setOnTouchListener(new View.OnTouchListener() {
我必须构建具有无限自动滚动功能的 View 寻呼机。我还需要在 View 寻呼机下方显示一个页面指示器,它应该根据滚动事件做出响应。目前我已经为无限自动滚动应用了以下逻辑: public void s
我正在尝试按照一些教程使用 View 寻呼机创建一个自动图像 slider 。我让一切正常,但后来我看到了 编舞:跳过 1 帧!应用程序可能在其主线程上做了太多工作。 并搜索了错误。` 你看,在我的代
如何从viewpager的第0个index跳转到view pager的最后一个index?那就是如何让view pager循环呢?如果用户向左滑动,我想跳转到最后一个索引;如果用户向右滑动,我想从最后
我在一个 iOS 应用程序上工作,它从服务器获取视频和图像,每个对象都有很多图像和视频,我需要在 slider (寻呼机)中显示这些图像和视频,用户可以在其中滑动以获取下一个,并且我需要将这些视频和图
我们目前正在使用 VS 2008 C# 开发 Windows 窗体应用程序。此应用程序用于阅读长(200 - 300 页)的法律文件,它处理大约 30 - 40 个文档。应用程序在文档文本中搜索,在文
我正在开发一个项目,其中我在一个屏幕上使用 View Pager,如下所示: 但是你可以在那里看到,有一个上层布局,其中列出了根据显示的页面选择的年份。当我们滑动 View 寻呼机时,年份也会根据显示
我需要在带有图像的 View 寻呼机文件中获取页面指示器。这是我的代码。 public class IndicatorActivity extends Activity { /** Called w
有没有办法用代表每张幻灯片的单词替换寻呼机中 slider 的圆圈(就像可单击的菜单,滑动其下方的内容)?选项在这里http://bxslider.com/options但不确定哪一个可以实现这一目标
ViewPager 叠加在 fab 之上。如何将 fab 放在首位? xml: 或者也许这不是原因?当我在上面时,只是没有按下按钮,但选项卡被翻转。 最佳答案 Coordinat
我正在尝试实现一个垂直可滑动的ViewPager,它有一堆卡片,就像外观一样。 我能够使用 ViewPager.PageTransformer 并交换触摸点来实现 VerticalViewPager。
我无法以编程方式创建和添加 View 寻呼机。 我找到了这个问题Android create ViewPager programmatically但接受的答案对我不起作用。 相关代码如下。
我有一个 View 寻呼机,其中每个页面都是一个自定义 View ( ... 而不是 Fragment ),我正在使用 LayoutInflator 进行扩充。 .每个自定义 View 都有一个 Im
我已经使用 jQuery 设置了一个动画 slider : jsFiddle 演示:http://jsfiddle.net/neal_fletcher/9zRDV/ 原因是我想在幻灯片上实现轻微的悬垂
我是一名优秀的程序员,十分优秀!