因为自定义表头,所以原来系统中实现的排序功能就失效了
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
//判断创建的行是否为表头行
if (e.Row.RowType == DataControlRowType.Header)
{
//获取表头所在行的所有单元格
TableCellCollection tcHeader = e.Row.Cells;
//清除自动生成的表头
tcHeader.Clear(); tcHeader.Add(new TableHeaderCell());
tcHeader[0].RowSpan = 2;
tcHeader[0].Text = "学校"; tcHeader.Add(new TableHeaderCell());
tcHeader[11].Text = "今日总数</th></tr><tr>";
}
}尝试改为如下:
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
//判断创建的行是否为表头行
if (e.Row.RowType == DataControlRowType.Header)
{
//获取表头所在行的所有单元格
TableCellCollection tcHeader = e.Row.Cells;
//清除自动生成的表头
tcHeader.Clear(); tcHeader.Add(new TableHeaderCell());
tcHeader[0].RowSpan = 2;
tcHeader[0].Text = "<a href=\"javascript:__doPostBack('GridView1','Sort$f_school')\">学校</a>"; tcHeader.Add(new TableHeaderCell());
tcHeader[11].Text = "今日总数</th></tr><tr>";
}
}点击排序后运行出错:回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。看到网上说
自己在表头中添加控件,自己实现排序功能
tcHeader[0].Controls.Add(button1);但不知道怎么弄?有没有简单点的方法?
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
//判断创建的行是否为表头行
if (e.Row.RowType == DataControlRowType.Header)
{
//获取表头所在行的所有单元格
TableCellCollection tcHeader = e.Row.Cells;
//清除自动生成的表头
tcHeader.Clear(); tcHeader.Add(new TableHeaderCell());
tcHeader[0].RowSpan = 2;
tcHeader[0].Text = "学校"; tcHeader.Add(new TableHeaderCell());
tcHeader[11].Text = "今日总数</th></tr><tr>";
}
}尝试改为如下:
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
//判断创建的行是否为表头行
if (e.Row.RowType == DataControlRowType.Header)
{
//获取表头所在行的所有单元格
TableCellCollection tcHeader = e.Row.Cells;
//清除自动生成的表头
tcHeader.Clear(); tcHeader.Add(new TableHeaderCell());
tcHeader[0].RowSpan = 2;
tcHeader[0].Text = "<a href=\"javascript:__doPostBack('GridView1','Sort$f_school')\">学校</a>"; tcHeader.Add(new TableHeaderCell());
tcHeader[11].Text = "今日总数</th></tr><tr>";
}
}点击排序后运行出错:回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。看到网上说
自己在表头中添加控件,自己实现排序功能
tcHeader[0].Controls.Add(button1);但不知道怎么弄?有没有简单点的方法?
DataView dv=new DataView ();
dv.sort="id DESC";
点击时,通过sortcommand事件,判断点击的是哪一列
设置sort=该字段名
如果sort原本就等于该字段名,则设置sort等于该字段名 desc
然后在sql中拼接上sort
重新获取dt
重新绑定列表显示
{
string sql = "";
if (ViewState["SortDirection"] == null || ViewState["SortDirection"].ToString().CompareTo("") == 0)
{
ViewState["SortDirection"] = " desc";
}
else
ViewState["SortDirection"] = "";
sql = " order by " + e.SortExpression + ViewState["SortDirection"];
GridViewBind(sql);
}
protected void GridView1_OnRowCreated(object sender, GridViewRowEventArgs e)
{
TableCellCollection tcHeader = e.Row.Cells;
tcHeader.Clear();
tcHeader.Add(new TableHeaderCell());
tcHeader[0].Attributes.Add("rowspan", "2");
tcHeader[0].Text = "名称";
tcHeader.Add(new TableHeaderCell());
tcHeader[1].Attributes.Add("rowspan", "2"); }