2

DataGridView でセルを編集するためのコントロールをホストする方法を説明する方法: Windows フォーム DataGridView セルでコントロールをホストする方法を見てきました。しかし、セルを表示するためのコントロールをホストするにはどうすればよいでしょうか?

ファイル名とボタンを同じセルに表示する必要があります。私たちの UI デザイナーはプログラマーではなくグラフィック デザイナーです。私たちは VS2008 を使用し、.NET 3.5 用に C# で書いています。

更新: 'net は、最初のステップとして、パネルをホストするカスタム DataGridViewCell を作成することを提案しています。誰かがそれをしましたか?

4

3 に答える 3

3

あなたの「更新」に従って、カスタムを作成することDataGridViewCellがこれが行われる方法です。MSDN から入手できるサンプル コードをそれほど変更する必要はありません。私の場合、一連のカスタム編集コントロールが必要だったので、DataGridViewTextBoxCellと から継承することになりDataGridViewColumnました。DataGridViewTextBoxCellを実装した新しいカスタム コントロールを自分のクラス (から継承したもの) に挿入したIDataGridViewEditingControlところ、すべてうまくいきました。

あなたの場合、Panel から継承して実装するPanelDataGridViewCellコントロールを含む a を書くことができると思います。MyPanelControlIDataGridViewEditingControl

于 2009-01-28T06:21:26.170 に答える
2

これを行うには2つの方法があります。

1)。DataGridViewCellを存在する特定のセルタイプにキャストします。たとえば、DataGridViewTextBoxCellをDataGridViewComboBoxCellタイプに変換します。

2)。コントロールを作成してDataGridViewのコントロールコレクションに追加し、ホストするセルに合うようにその場所とサイズを設定します。

トリックを説明する以下のZhi-XinYeのサンプルコードを参照してください。

private void Form_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("name");
    for (int j = 0; j < 10; j++)
    {
        dt.Rows.Add("");
    }
    this.dataGridView1.DataSource = dt;
    this.dataGridView1.Columns[0].Width = 200;

    /*
    * First method : Convert to an existed cell type such ComboBox cell,etc
    */

    DataGridViewComboBoxCell ComboBoxCell = new DataGridViewComboBoxCell();
    ComboBoxCell.Items.AddRange(new string[] { "aaa","bbb","ccc" });
    this.dataGridView1[0, 0] = ComboBoxCell;
    this.dataGridView1[0, 0].Value = "bbb";

    DataGridViewTextBoxCell TextBoxCell = new DataGridViewTextBoxCell();
    this.dataGridView1[0, 1] = TextBoxCell;
    this.dataGridView1[0, 1].Value = "some text";

    DataGridViewCheckBoxCell CheckBoxCell = new DataGridViewCheckBoxCell();
    CheckBoxCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
    this.dataGridView1[0, 2] = CheckBoxCell;
    this.dataGridView1[0, 2].Value = true;

    /*
    * Second method : Add control to the host in the cell
    */
    DateTimePicker dtp = new DateTimePicker();
    dtp.Value = DateTime.Now.AddDays(-10);
    //add DateTimePicker into the control collection of the DataGridView
    this.dataGridView1.Controls.Add(dtp);
    //set its location and size to fit the cell
    dtp.Location = this.dataGridView1.GetCellDisplayRectangle(0, 3,true).Location;
    dtp.Size = this.dataGridView1.GetCellDisplayRectangle(0, 3,true).Size;
}

MSDNリファレンス:DataGridViewコントロールの同じ列でさまざまなコントロールをホストする方法

最初の方法を使用すると、次のようになります。

DataGridView列のさまざまなコントロール

2番目の方法を使用すると、次のようになります。

ここに画像の説明を入力してください

追加情報:グリッドの初期化中に同じDataGridView列のコントロールがレンダリングされない

于 2013-03-03T00:55:26.157 に答える
2

datagridview を使用する代わりに、TableLayoutPanel を使用するのはどうでしょうか。ラベルとボタンとイベントを持つコントロールを作成し、レイアウト パネルにそれらを入力します。あなたのコントロールはいわばセルになります。テーブル レイアウト パネルを datagridview のように見せるのに、それが必要なレイアウト スタイルであれば、それほど時間はかかりません。

于 2009-05-19T06:46:56.580 に答える