Sorting GridView排序,但链接按钮';Commands的参数不是
gridview显示精细,按任一列进行排序效果很好。但是,单击链接按钮时,返回的CommandArgument值不正确。这就好像CommandArgument绑定到了行,并且没有得到排序 i、 e.分类前Sorting GridView排序,但链接按钮';Commands的参数不是,sorting,gridview,linkbutton,commandargument,Sorting,Gridview,Linkbutton,Commandargument,gridview显示精细,按任一列进行排序效果很好。但是,单击链接按钮时,返回的CommandArgument值不正确。这就好像CommandArgument绑定到了行,并且没有得到排序 i、 e.分类前 Text Command abc A aaa B aab C 排序后 Text Command aaa A aab B abc C 单击aaa将返回“A”作为参数,而不是B aspx文件中的GridView定义如下: <asp:GridVi
Text Command
abc A
aaa B
aab C
排序后
Text Command
aaa A
aab B
abc C
单击aaa将返回“A”作为参数,而不是B
aspx文件中的GridView定义如下:
<asp:GridView ID="GridView1" runat="server"
AllowSorting="True"
AutoGenerateColumns="False"
EmptyDataText="No Results to Display"
GridLines="None"
onsorting="GridView1_Sorting" >
<Columns>
<asp:TemplateField HeaderText="File Name" SortExpression="Path">
<ItemTemplate>
<asp:LinkButton ID="linkbutton1" runat="server" Text='<%# Eval("Title") %>' OnCommand="LinkButton_Click" CommandArgument='<%# Bind("Path") %>' ></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Document Type" DataField="DocumentCategory (Text)" SortExpression="DocumentCategory (Text)" />
</Columns>
</asp:GridView>
我的分类方法是
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string sortDir = "ASC";
if (ViewState["SortDirection"] == null)
ViewState["SortDirection"] = "ASC";
if (ViewState["SortDirection"].ToString() == "ASC")
{
sortDir = "DESC";
ViewState["SortDirection"] = "DESC";
}
else
{
ViewState["SortDirection"] = "ASC";
}
DataTable dt = (DataTable)ViewState["GridView1_DataSource"];
DataView dv = new DataView(dt);
dv.Sort = e.SortExpression + " " + sortDir;
GridView1.DataSource = dv;
GridView1.DataBind();
}
通过GridView1\u排序进行排序时,会先处理页面加载,然后再处理GridView1\u排序。因此,数据显示正确。单击LinkButton时,页面加载将在GridView1\uuuu行命令之前处理。通常,Gridview的数据绑定在页面加载中,因此数据现在处于原始顺序。要更正,请将排序也放在页面加载数据绑定中 如果(dt.Rows.Count>0) { 数据视图dv=新数据视图(dt) } 我认为您无法对空数据表进行排序
您可以通过调试并在排序和页面加载中添加断点来轻松验证这一点 我找到了解决办法。这对我有用。试试这个
protected void LinkButton_Click(object sender, EventArgs e)
{
sortExpr = "Path";
GridView1_Sorting(null, null);
}
改变这一点:
string sortExpr;
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
String sortExpression = null;
if (sortExpr == null)
{
sortExpression = e.SortExpression;
}
else
{
sortExpression = sortExpr;
}
Session["SortExpression"] = sortExpression;
if (Session["SortDirection"] != null && Session["SortDirection"].ToString() == SortDirection.Descending.ToString())
{
Session["SortDirection"] = SortDirection.Ascending;
SortGridview(sortExpression, "ASC");
}
else
{
Session["SortDirection"] = SortDirection.Descending;
SortGridview(sortExpression, "DESC");
}
}
private void SortGridview(string sortExpression, string Direction)
{
DataView dv = null;
DataTable dt = GridView1.DataSource as DataTable;
dv = new DataView(dt);
dv.Sort = sortExpression + " " + Direction;
GridView1.DataSource = dv;
GridView1.DataBind();
}
你找到解决办法了吗?我有同样的问题,我有同样的问题。有人吗?甚至更好——根本不更新加载页面上的数据源。在处理事件后执行更新。
protected void LinkButton_Click(object sender, EventArgs e)
{
sortExpr = "Path";
GridView1_Sorting(null, null);
}
string sortExpr;
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
String sortExpression = null;
if (sortExpr == null)
{
sortExpression = e.SortExpression;
}
else
{
sortExpression = sortExpr;
}
Session["SortExpression"] = sortExpression;
if (Session["SortDirection"] != null && Session["SortDirection"].ToString() == SortDirection.Descending.ToString())
{
Session["SortDirection"] = SortDirection.Ascending;
SortGridview(sortExpression, "ASC");
}
else
{
Session["SortDirection"] = SortDirection.Descending;
SortGridview(sortExpression, "DESC");
}
}
private void SortGridview(string sortExpression, string Direction)
{
DataView dv = null;
DataTable dt = GridView1.DataSource as DataTable;
dv = new DataView(dt);
dv.Sort = sortExpression + " " + Direction;
GridView1.DataSource = dv;
GridView1.DataBind();
}