我顯示彙總行作爲最後一行。我想在用戶點擊列標題時排除該行排序。通過使用sql union
我將總列添加到我的結果中。我正在使用SQL,C#和DataGridView
控制。我無法公開ColumnHeader_Click
事件。我只使用TableStyle[0].AllowSorting = false
。我如何在控件上應用自定義排序?排除彙總行排序綁定DataGridView
感謝
我顯示彙總行作爲最後一行。我想在用戶點擊列標題時排除該行排序。通過使用sql union
我將總列添加到我的結果中。我正在使用SQL,C#和DataGridView
控制。我無法公開ColumnHeader_Click
事件。我只使用TableStyle[0].AllowSorting = false
。我如何在控件上應用自定義排序?排除彙總行排序綁定DataGridView
感謝
該解決方案是基於@ T.S.的建議,而是直接工作在DataSet中,而不是在SQL。
我已經在VS2013中測試過它;我不知道這是否會在NET 1.1工作,就必須重振非常老的機器來測試..
我不知道你的
的意思我不能顯示columnheader_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();
}
謝謝TaW,你的回答對我有幫助。我的需求有點不同,我需要Total出現在頂部,並且始終保留排序列,因爲我的網格具有高度的交互性,可以對所呈現的數據進行過濾和更改。
我的排序是通過
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();
附註:我不得不使用會話來保存自定義排序而不是ViewState,因爲這是不正確的與我的GridView中的動態創建按鈕
我會說,在你的聯盟中添加另一個隱藏的列。所有的記錄都是1,你的總記錄是2.然後,當你在你的'Dataview'中排序時,總是先按該列排序,然後再按所有其他列排序。 –