DataGridViewの行を表します。
DataGridView.RowTemplateを使用せずに、空の状態でインスタンスを作成できます。
public DataGridViewRow ();DataGridViewRow コンストラクター (System.Windows.Forms) | Microsoft Learn
RowTemplateを使用するならばコンストラクタを用いず、DataGridViewRowCollection.Add()で追加するか、テンプレートをClone()で複製して用います。
DataGridViewRow row = (DataGridViewRow)dataGridView.RowTemplate.Clone();
型 | プロパティ | 内容 |
---|---|---|
DataGridView | DataGridView | この要素に関連付けられているDataGridView。関連付けられていなければnull |
int | Index | DataGridView内での相対位置。既定は-1で、行がDataGridViewに関連付けられていないことを示す。DataGridViewColumn.Indexとは異なり、表示位置と一致する |
DataGridViewRowHeaderCell | HeaderCell | 行のヘッダーセル。典型的には行ラベルを表示するのに用いられる。設定によってはクリックで行を選択できる
この行のヘッダーセルのスタイルなどは、DataGridViewのRowHeaders***プロパティで設定できる |
DataGridViewCellCollection | Cells | 行のセル (DataGridViewCell) のコレクション |
bool | Displayed | trueならば、画面に現在表示されている。一部でも表示されていればtrueとなる
内部的にはGetState()で、DataGridViewElementStates.Displayedであることで判定している Displayed - DataGridViewRow.cs |
bool | Selected | trueならば、行が選択されている |
bool | Frozen | trueならば、行が固定 (frozen) されている
固定されている行より上のすべての行は、スクロール時に固定される |
DataGridViewElementStates | State | 行の状態 |
DataGridViewCellStyle | DefaultCellStyle | 行の既定のスタイル |
int | Height | 行の高さ |
int | MinimumHeight | 行の最小の高さ |
DataGridViewTriState | Resizable | 行をリサイズ可能か、AllowUserToResizeRowsがtrueのときだけリサイズ可能かどうか |
object | DataBoundItem | 行にバインドされているオブジェクト
DataSourceが設定されているとき、その行への参照を得られる |
string | ErrorText | 行のエラーを表すエラーメッセージのテキスト |
Cellsプロパティから列名でDataGridViewCellを取得するとき、それに該当するセルが存在しないとArgumentExceptionが投げられます。これに対処するにはDataGridView.Columns.Contains(string columnName)で、その列が存在するか先に確認します。
列挙子 | 値 | 要素の状態 |
---|---|---|
None | 0 | an element is in its default state. |
Displayed | 1 | an element is currently displayed onscreen. |
Frozen | 2 | an element cannot be scrolled through the UI. |
ReadOnly | 4 | an element will not accept user input to change its value. |
Resizable | 8 | an element can be resized through the UI. This value is ignored except when combined with the ResizableSet value. |
ResizableSet | 16 | an element does not inherit the resizable state of its parent. |
Selected | 32 | an element is in a selected (highlighted) UI state. |
Visible | 64 | an element is visible (displayable). |
並べ替え後もそれぞれの行の高さを維持するには、RowHeightInfoPushedイベントで値を保持しておき、RowHeightInfoNeededイベントでその値に設定するようにします。Remarks - DataGridView.RowHeightInfoNeeded Event (System.Windows.Forms) | Microsoft Learn
int[] height = new int[100]; private void dataGridView1_RowHeightInfoPushed(object sender, DataGridViewRowHeightInfoPushedEventArgs e) { height[e.RowIndex] = e.Height; } private void dataGridView1_RowHeightInfoNeeded(object sender, DataGridViewRowHeightInfoNeededEventArgs e) { e.Height = height[e.RowIndex]; }
列ヘッダーの高さは、DataGridView.ColumnHeadersHeightで設定します。ただしDataGridView.ColumnHeadersHeightSizeModeがAutoSizeに設定されているとこれが無視されるため、先にAutoSize以外に変更します。
DataTable table = new DataTable(); table.Columns.Add(); DataRow row = table.Rows.Add(); dataGridView.DataSource = table; object o1 = dataGridView.Rows[0].DataBoundItem; // DataRowView row.Delete(); int c1 = table.Rows.Count; // 0 int c2 = dataGridView.RowCount; // 1 object o2 = dataGridView.Rows[0].DataBoundItem; // null
バインドされているオブジェクトにアクセスできないと、CurrencyManager.get_Item(Int32 index)
からIndexOutOfRangeExceptionが投げられます。これはバインドされているオブジェクトが、異なるスレッドで変更されているときなどに生じます。
メソッド | 機能 |
---|---|
GetState(Int32) | 行の状態を得られる |
Paint(Graphics, Rectangle, Rectangle, Int32, DataGridViewElementStates, Boolean, Boolean) | 現在の行を描画できる |
PaintCells(Graphics, Rectangle, Rectangle, Int32, DataGridViewElementStates, Boolean, Boolean, DataGridViewPaintParts) | 現在の行のセルを描画できる |
PaintHeader(Graphics, Rectangle, Rectangle, Int32, DataGridViewElementStates, Boolean, Boolean, DataGridViewPaintParts) | 現在の行のヘッダーセルを描画できる |
// セルに設定するオブジェクトを指定して、行に追加 string[] values = new string[] { "A", "B" }; int rowIndex1 = dataGridView.Rows.Add(values); int rowIndex2 = dataGridView.Rows.Add(10, 20); // 行を追加して、その行のセルにオブジェクトを指定 int rowIndex3 = dataGridView.Rows.Add(); DataGridViewRow row = dataGridView.Rows[rowIndex3]; row.Cells[0].Value = 123; row.Cells[1].Value = "ABC";
データソースとバインドしているならば、それが備えるフィルタ機能で検索できます。さもなくばDataGridView.Rowsを1行ずつ調べます。c# - Find a row in dataGridView based on column and value - Stack Overflow
DataGridViewRowにバインドしているデータソースの行は、DataBoundItemから取得できます。このことを利用すれば、データソースの行からDataGridViewRowを特定できます。
DataTable table = new DataTable(); table.Columns.Add(); DataRow row0 = table.Rows.Add(""); DataRow row1 = table.Rows.Add(""); dataGridView.DataSource = table; // 行にバインドされているオブジェクトを取得する object obj1 = dataGridView.Rows[1].DataBoundItem; DataRowView rowView1 = (DataRowView)obj1; bool res0 = object.ReferenceEquals(row0, rowView1.Row); // false bool res1 = object.ReferenceEquals(row1, rowView1.Row); // true