C# 从对绑定的DataGridView排序中排除总计行
我将显示总计行作为最后一行。我想在用户单击列标题时从排序中排除该行。通过使用C# 从对绑定的DataGridView排序中排除总计行,c#,winforms,.net-1.1,C#,Winforms,.net 1.1,我将显示总计行作为最后一行。我想在用户单击列标题时从排序中排除该行。通过使用sqlunion我将total列添加到我的结果中。我正在使用SQL、C#和DataGridView控件。我无法公开ColumnHeader\u单击事件。我只使用了表样式[0]。AllowSorting=false。如何在控件上应用自定义排序 谢谢此解决方案基于@T.S.的建议,但直接在数据集中工作,而不是在SQL中 我在VS2013中进行了测试;我不知道它是否能在.NET1.1中工作,并且必须恢复一台非常旧的机器来测试它
sqlunion
我将total列添加到我的结果中。我正在使用SQL、C#和DataGridView
控件。我无法公开ColumnHeader\u单击事件。我只使用了表样式[0]。AllowSorting=false
。如何在控件上应用自定义排序
谢谢此解决方案基于@T.S.的建议,但直接在数据集中工作,而不是在SQL中
我在VS2013中进行了测试;我不知道它是否能在.NET1.1中工作,并且必须恢复一台非常旧的机器来测试它
我不知道你说的是什么意思
我无法公开columnheader\u click事件
我已将解决方案拆分为一个函数和ColumnHeaderMouseClick
事件;如果你真的不能使用该事件,你将不得不找到另一种方法;但无论如何,您需要触发排序并决定按哪一列进行排序
解决方案的核心是设置新的列值和表达式,您可以通过它们来标识“TotalsRow”。我使用了测试表的PK列“ID”,并将“ID=1记录”推到底部。在所有行上将排序列设置为0后,适合表达式的第一行设置为maxInt
您必须将其调整为适用于结果集的表达式
我正在动态添加和设置自定义排序列,并在排序后删除它;DGV暂停其布局,直到整个事件完成
DataTable yourTable = ..
private void dataGridView1_ColumnHeaderMouseClick(object sender,
DataGridViewCellMouseEventArgs e)
{
string col = dataGridView1.Columns[e.ColumnIndex].Name;
if (col != "") sortDGV (col );
}
private void sortDGV(string col)
{
dataGridView1.SuspendLayout();
yourTable.Columns.Add("sortMe", typeof(Int32));
yourTable.DefaultView.Sort = col;
DataRow[] dr = yourTable.Select("ID='1'");
for (int r = 0; r < yourTable.Rows.Count; r++) yourTable.Rows[r]["sortMe"] = 0;
dr[0]["sortMe"] = int.MaxValue;
yourTable.DefaultView.Sort = "sortMe," + col;
yourTable.Columns.Remove("sortMe");
dataGridView1.ResumeLayout();
}
DataTable yourTable=。。
私有void dataGridView1_ColumnHeaderMouseClick(对象发送方,
DataGridViewCellMouseEventArgs(e)
{
string col=dataGridView1.Columns[e.ColumnIndex].Name;
if(col!=“”)sortDGV(col);
}
私有void sortDGV(字符串列)
{
dataGridView1.SuspendLayout();
添加(“sortMe”,typeof(Int32));
yourTable.DefaultView.Sort=col;
DataRow[]dr=yourTable.Select(“ID='1');
对于(int r=0;r谢谢你,你的回答帮助了我。我的需求有点不同,我需要总计显示在顶部,并始终保留排序列,因为我的网格与所呈现数据中的过滤和更改负载高度交互
我的分类是通过
protected void ReportGridView_Sorting(object sender, GridViewSortEventArgs e)
下面是我在填充GridView的方法中使用的内容:
if (!myDataTable.Columns.Contains("SortLevel"))
{
myDataTable.Columns.Add("SortLevel", typeof(Int16));
foreach (DataRow dr in myDataTable.Rows)
{
dr["SortLevel"] = 0;
}
dt.Rows[0]["SortLevel"] = 1;
}
if ((Session["SortDirection"] != null) && (Session["SortExpression"] != null))
{
myDataTable.DefaultView.Sort = "SortLevel DESC, " + Session["SortExpression"] + " " + Session["SortDirection"];
}
MyGridView.DataSource = myDataTable;
MyGridView.AllowSorting = true;
MyGridView.DataBind();
旁注:我不得不使用Sessions来保存自定义排序,而不是ViewState,因为在我的gridview中动态创建的按钮无法正常工作我想说的是,在联合中添加另一个隐藏列。所有记录将为1,总计记录将为2。然后,当您在数据视图中排序时,总是先按该列排序,然后按所有其他列排序。