winform DataGridViewコントロール開発経験

6448 ワード

1.DataGridViewコントロールによるカラムの自動生成を行わない


AutoGenerateColumnsをfalseに設定.
dgTicket.AutoGenerateColumns = false;//列の自動生成を無効にする

2.DataGridViewにおけるRowsAddedイベントの注意事項


ASP.NETのGridViewコントロールでは、バインドデータを表示する際にRowDataUpdatedイベントがあり、そのイベント応答関数で各行ごとにバインドされたデータを行ごとにスキャンでき、必要に応じてGridView表示のフォーマットやValueなどを変更できるので便利です.
WinFormエンジニアリングでは、これと似たようなDataGridViewコントロールは、RowsAddedイベントのみが似ていますが、GridViewとは異なり、RowsAddedイベントの応答はRowDataUpdatedのように逐条応答していません.Debugでは長い間この問題を発見していましたが、実はDataGridViewRowsAddedEventArgs eのプロパティのRowCountを見ると、RowsAddedイベントの応答に複数行挿入する可能性があることがわかります.単行を挿入することもできます(Rowsは複数形で、愚かです).したがって、e.RowIndexを使用して挿入ローのインデックス値を取得し、e.RowCountを使用して挿入ローの数を取得します.この2つの変数を使用すると、バインドされたデータを簡単に巡回できます.コードは次のようになります.
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)  

{  

    int rowIndex = e.RowIndex;  

    int rowCount = e.RowCount;  

    for (int i = rowIndex; i < rowIndex + rowCount; i++)  

    {  

        //    List<AccountInfo>   ,              

        AccountInfo info = this.dataGridView1.Rows[i].DataBoundItem as AccountInfo; 



        /////////////////////////////////////////  

        //          

        ///////////////////////////////////////////  

     }  

}

3.asp.NetRowDataBound等価のイベントはCellFormattingイベントです

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)

 {

        //bala bala

}

4.DataGridViewCheckBoxの選択状態を取得する

private void butUpdate_Click(object sender, EventArgs e)

        {

            bool IsCheck = false;

            int count = this.dataGridView1.RowCount;

            Merchandise_Info mi = new Merchandise_Info();

            for (int i = 0; i < count; i++)

            {

                //if ((bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).Value) == true)

                if ((bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).EditedFormattedValue) == true)

                {

                    mi.Name = this.dataGridView1.Rows[i].Cells["TypeName"].Value.ToString();

                    IsCheck = true;

                    MessageBox.Show(this.dataGridView1.Rows[i].Cells["TypeName"].Value.ToString());

                }

               

            }

            if (IsCheck == false)

            {

                MessageBox.Show("", "    ");

            }

        }

説明:(DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]//まず行i 0列目(行i 0列目にはCheckBoxコントロールが入っている)をDataGridViewCheckBoxセルに変換
(bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).Value//boolタイプに変換中!
肝心なのは、以下の2つの方法でCheckBoxの選択状態を判断することです!
(1)if ((bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).Value) == true)(2)if ((bool)(((DataGridViewCheckBoxCell)this.dataGridView1.Rows[i].Cells[0]).EditedFormattedValue) == true)
両者の違いは、(1)メソッドを使用する場合は、まずCheckBoxコントロールに初期値を設定する必要があります(CheckBoxの値を選択または選択に設定するか、CheckBoxをチェックする必要があります.つまり、CheckBoxを動かしたり、先に値を割り当てたりする必要があります).そうしないと、「オブジェクトリファレンスをオブジェクトのインスタンスに設定していません」とエラーが発生します.
メソッド(2)を使用する場合は、CheckBoxコントロールに初期値を設定する必要はありません.EditedFormatedValueは、現在のセルが編集されているかどうかを考慮することなく、現在のセルが編集されているかどうかを考慮することなく、現在のセルがフォーマットされている値を取得します.CheckBoxコントロールに初期値を設定する必要はありません.
ははは!選択したかどうかを取得すると、選択した行の値が取得されます!!

5.行の高さを設定する

// 21px
   this
.dataGridView1.RowTemplate.Height = 21;
  
//DataGridView 1のすべての列の列幅DataGridView 1を変更することを禁止する.AllowUserToResizeColumns = false;//DataGridView 1のすべての行の行高DataGridView 1の変更をユーザーに禁止する.AllowUserToResizeRows = false;