バウンドDataGridViewをソートすることから合計行を除外します -- c# フィールド と winforms フィールド と .net-1.1 フィールド 関連 問題

Exclude the Totals Row from sorting a bound DataGridView












0
vote

問題

日本語

最後の行として合計行を表示しています。ユーザーが列ヘッダーをクリックすると、その行をソートから除外したいと思います。 sql union を使用すると、結果に合計列を追加しています。私はSQL、C#および<コード> DataGridView SO_REUSEPORT0 イベントを公開できません。 SO_REUSEPORT1 を使用しています。そのカスタムソートをコントロールに適用するにはどうすればよいですか?

ありがとう

英語

I am showing a Totals Row as last row. I want to exclude that row from sorting when the user clicks on the column header. By using sql union I am adding total column to my result. I am using SQL, C# and DataGridView control. I am not able to expose ColumnHeader_Click event. I am only using TableStyle[0].AllowSorting = false. How can I apply that custom sorting on the control?

Thanks

</div
        
 
 

回答リスト

1
 
vote

ありがとうTAW、あなたの答えは私を助けました。私のニーズは少し異なっていました、私のグリッドがフィルタリングの負荷と提示されているデータの変化と非常にインタラクティブであるため、上位に現れる合計が必要でした。

マイソートは

で行われます <事前> <コード> // Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR). boost::asio::ip::tcp::resolver resolver(io_service_); boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve({address, port}); acceptor_.open(endpoint.protocol()); acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); acceptor_.bind(endpoint); acceptor_.listen(); 0

ここに私が私の方法でgridviewを入力するために使用したものです:

<事前> <コード> // Open the acceptor with the option to reuse the address (i.e. SO_REUSEADDR). boost::asio::ip::tcp::resolver resolver(io_service_); boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve({address, port}); acceptor_.open(endpoint.protocol()); acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); acceptor_.bind(endpoint); acceptor_.listen(); 1

SIDE注:これがMy GridViewの動的に作成されたボタンで正しく機能していないので、SessionsをViewStateの代わりにカスタムソートを保持しなければなりませんでした。

 

Thanks TaW, your answer helped me. My needs were a little different, I needed the Total to appear at the top and also retain the sort column throughout as my grid is highly interactive with loads of filtering and changes in the data being presented.

My sorting is done via

protected void ReportGridView_Sorting(object sender, GridViewSortEventArgs e) 

Here's what I ended up using in my method to populate the 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(); 

Side note: I had to use Sessions to hold the custom sorting instead of ViewState as this wasn't working properly with the dynamically created buttons in my gridview

</div
 
 
0
 
vote

この解決策は@ t.s.の提案に基づいていますが、SQLではなくデータセットで直接機能します。

私はそれをVS2013でテストしました。私はそれが.NET 1.1で働くかどうかわからず、それをテストするために非常に古いマシンを復活させなければならないでしょう..

あなたが何を意味するのかわからない

columnheader_clickイベントを公開できません。

解を関数に分割し、 ColumnHeaderMouseClick イベントに分割しました。あなたが本当にそのイベントを使うことができないならば、あなたは別の方法を見つける必要があるでしょう。しかし、どちらか一方の方法または他方の並べ替えをトリガして、どの列をソートするかを決定する必要があります。

解決策の中心は、新しい列値の設定とあなたがあなたの「TotalSrow」を識別する式です。テストテーブルのPK列 'ID'を使用し、「ID = 1レコード」を下部に押しました。すべての行のソート列を0に設定した後、式に合わせて最初の行がMaxintに設定されます。

結果セットのために機能する式にそれを適応させる必要があります。

を追加し、設定カスタムソート列は、ソート後の削除を削除します。 Affair全体が完了するまで、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(); }
 

This solution is based on @T.S.'s suggestion but works directly in the DataSet, not in SQL.

I have tested it in VS2013; I don't know if it will work in .Net 1.1 and would have to revive a very old machine to test that..

I don't know what you mean by

I am not able to expose columnheader_click event.

I have split the solution into a function and the ColumnHeaderMouseClick event; if you really can't use that event you will have to find another way; but one way or the other you need to trigger the sort and decide by which column(s) to sort.

The heart of the solution are the setting of the new column values and the expression by which you identify your 'TotalsRow'. I have used my test table's PK column 'ID' and push the 'ID=1 record' to the bottom. After setting the sort column to 0 on all rows the first row to fit the expression is set to maxInt.

You will have to adapt that to an expression that works for your result set.

I am adding and setting the custom sort column dynamically and remove it after the sort; the DGV is suspending its layout until the whole affair is completed.

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(); } 
</div
 
 

関連する質問

0  DataGrid 1.0から行順を取得します  ( Retrieve row order from datagrid 1 0 ) 
私は.NET 1.1であるレガシアプリを作業しています。(列ヘッダーをクリックして)DataGrid Post Sortの行を取得する必要があります。これは簡単な作業のように聞こえましたが、その答えは私をもらうようです。私はデータセットからの行を元に戻すことが...

6  例外でDataReaderを閉じる方法  ( How to close a datareader on exception ) 
私のデータ層のいくつかの方法で次のコードを持っています: <事前> <コード> StringBuilder sb = new StringBuilder(); SqlCommand s = new SqlCommand(sb.ToString(), conn)...

3  デフォルトのアプリケーションプール設定プロパティをプログラムで変更する方法  ( How do i change default application pool setting properties programatically in ) 
C#を使用して、IIS 6.0のデフォルトのアプリケーションプールで一部のプロパティを変更し、.NET 1.1フレームワークを使用してコードを使用するように制約されています。私は.NET 1.1 COZに制限されています.NET 1.1を使用するWebサイト...

0  UpdatePanelアップグレードされたWebProjectで機能していません  ( Updatepanel not working in upgraded webproject ) 
私はもともとvb.net 1.1で開発された古いWebアプリケーションを使用しています。アプリケーションは4.0フレームワークに変換され、AjaxとUpdatePanelを使用したいと思いました。ただし、UpdatePanelが期待どおりに機能することはできま...

1  GetProcessesByName()およびWindows Server 2003スケジュールされたタスク  ( Getprocessesbyname and windows server 2003 scheduled task ) 
Windows Server 2003のスケジュールされたタスクとして正常に実行する必要があるのは、次のコードに必要なユーザー権限が必要なのかを知っています。 <事前> <コード> System.Diagnostics.Process.GetProcesse...

5  ASP.NET 1.1 Webアプリケーションから.NET 2.0 COMオブジェクトを呼び出すことができますか?  ( Can you call a net 2 0 com object from an asp net 1 1 web app ) 
ASP.NET 1.1 Webアプリケーションを持っています。これはC ++ COMオブジェクトを呼び出し、それが順番に.NET COMオブジェクトを呼び出します。元々、この.NET COMオブジェクトは.NET 1.1アセンブリでした。さて、この.NET ...

3  絵の箱は空白になります  ( Picture box goes blank ) 
VisualBasic.net映像ボックスを有効にしてから描画すると、それは描画してからすぐに空白になります。それを再描画するとうまくいきますが、私がそれを描く初めて常に常にめちゃくちゃになります。これはいくつかの異なるプログラムで発生し、ヘルプファイルはヘ...

0  NET 1.1のXMLTextReader  ( Xmltextreader in net 1 1 ) 
XMLファイルを読み取るプロセスがあります。 XMLTextReaderクラスを使用してこれを行い、XML Parser / Readerのみが高速であるとされると考えられます。 は、1メガバイトテストファイルですぐに機能しますが、ライブシステムで12のME...

4  WebServicesでカスタムオブジェクトを返す方法  ( How to return custom objects with webservices ) 
[問題] サーバーマシンとクライアントマシンにデプロイされる共有ライブラリを作成したことは、ライブラリから提供されたクラスとクライアントサーバー間でどのように通信するのですか? Webサービスによって返されたシリアル化されたオブジェクトが共有ライブラ...

0  Page.toString().NET 1.1で少し奇妙な動作をしますか?  ( Page tostring behaves a bit weird in net 1 1 ) 
私はどのページのどちらのページをチェックする必要があるコントロールがありますので、それに応じて特定の変数を設定できます。 <事前> <コード> string pageName = this.Page.ToString(); switch (pageName) ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有