0

時々、私は通常、次のようなデータ型のクラスを作成します:

public class message{
    private string subject { get; set; }
    private string message { get; set; }
}

このようにして、 をデータグリッドにバインドし、List<message>を変更できDataPropertyNameます。

ただし、たまたまこのクラスに自動プロパティを追加すると、データグリッドが誤動作し始め、一部のプロパティをデータグリッドに追加したくない場合があります。選択した値のみにデータグリッドをバインドできる方法はありますDataPropertyNameか?

ありがとう。

4

2 に答える 2

2

データグリッドに余分な列が必要ない場合は、クエリから始めて、それらを SELECT 句にリストしないでください。これには、ネットワーク トラフィックを削減するという追加の利点があります。

同じテーブルから複数のクエリまたはビューを作成し、必要に応じて適切なタイミングで適切なものを使用します。これが「上流」のソリューションです。

あるいは、

AutoGenerateColumns プロパティが true に設定されている場合、各列の DataPropertyName プロパティは、DataSource プロパティで指定されたデータ ソース内のプロパティまたはデータベース列の名前に自動的に設定されます。このバインディングは手動で実行することもできます。これは、データ ソースで使用可能なプロパティまたはデータベース列のサブセットのみを表示する場合に役立ちます。このような場合は、AutoGenerateColumns プロパティを false に設定し、各 DataGridViewColumn を手動で追加して、各 DataPropertyName プロパティの値を、表示するデータ ソースのプロパティまたはデータベース列に設定します。

これは MSDN からの直接の情報です。これを投稿する前に、もう少し徹底的に調査する必要がありました。 http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.datapropertyname.aspx

于 2012-07-18T18:02:22.147 に答える
0

DataView を提供するメソッドを作成できます。

次のようなものがあるとします。

public class message {
    private string subject { get; set; }
    private string message { get; set; }
    private string otherValue { get; set; }
}

次に、次のようなメソッドをメッセージ クラスに追加できます。

public static DataView GetDataGridList(List<message> lstMessages) {
    DataTable dt = new DataTable();
    // Add the columns here for whatever properties you want
    dt.Columns.Add("subject");
    dt.Columns.Add("message");

    foreach (message msg in lstMessages) {
        DataRow dr = dt.NewRow(); // I think that's the call, I'm doing this off the top of my head, sorry.
        dr["subject"] = msg.subject;
        dr["message"] = msg.message;
    }

    return (dt.DefaultView);
}

次に、DataGrid を作成するときに、次のようにバインドします。

List<message> lstMessages = new List<message>();
// Populate the list however you want here.
DataGrid dg = new DataGrid();
dg.DataSource = message.GetDataGridList(List<message>);

準備万端です。必要なプロパティを変更する場合は、列を DataTable に追加してから foreach ループ内に追加することを覚えておいてください。

于 2012-07-18T17:50:33.807 に答える