我不是很有經驗的Windows窗體工作。我有一個特定的要求,那就是我想向DataGridView添加行,並且這些列有一個ComboBox或一個文本框。任何人都可以請指導我如何將「控制」列添加到DataGridView行。所以基本上我應該能夠添加與我的控件一樣多的行.Combo框也是級聯的。動態添加組合框/文本框到DataGridView Windows窗體C#
謝謝。
我不是很有經驗的Windows窗體工作。我有一個特定的要求,那就是我想向DataGridView添加行,並且這些列有一個ComboBox或一個文本框。任何人都可以請指導我如何將「控制」列添加到DataGridView行。所以基本上我應該能夠添加與我的控件一樣多的行.Combo框也是級聯的。動態添加組合框/文本框到DataGridView Windows窗體C#
謝謝。
你可以做什麼:
你不能做什麼:
這意味着:
你不能決定應該使用列的類型每一行。當你需要特定行的組合框時,你不能將它添加到包含所有隻需要textboxcolumns的行的datagridview。
你可以做的是:
在運行時,有一個叫DataGridView.GetCellDisplayRectangle memberfunction。通過這種方法,您可以在運行時獲得特定單元格的界限。讓我們想象你只有在這一個特定的行上應用組合框。這裏的方案:
void OnSelectionChanged(Object sender, ChangedEventArgs e){
if(DataGridView1.CurrentCell.RowIndex == 4){
// Show one single ComboBox in the specified Cell in the Row 4 (actually Row 3 because RowIndex is zero-based)
if(this.Controls.Contains(ComboBox1))
this.Controls.Remove(ComboBox1);
ComboBox ComboBox1 = gcnew ComboBox();
// Define the properties of your combobox:
ComboBox1.Text = "Choose an Option...";
ComboBox1.AutoSize = false; // Important, because you will change the size programmatically
// ...
// Get the boundaries of the desired cell
Rectangle CellBounds = DataGridView1.GetCellDisplayRectangle(
/*ColumnIndex*/ 1,
/*RowIndex*/ DataGridView1.CurrentCell.RowIndex,
/*CutOverflow*/ false);
// By applying size and location to the combobox you make sure it is displayed on the cell
ComboBox1.Size = CellBounds.Size;
ComboBox1.Location = CellBounds.Location;
// Add the ComboBox to your Controls in order to get it rendered when your window is shown
this.Controls.Add(ComboBox1);
}
現在你的組合框顯示在你GetCellDisplayRectangle(ColumnIndex, RowIndex, CutOverflow)
指定的細胞。當然,這個代碼可以進一步優化,因爲每次您選擇另一個單元格時,都會創建一個新的組合框並添加到您的控件容器中。在多次選擇後,這將有利地使用大量內存。但它會起作用。
嗯謝謝你的回覆。大多數時候,除了一列可以是組合框列或文本框列,並且這取決於在某列的組合框中選擇的值,所有行的列將具有相同的類型。 –
@ V.B好吧,通過上面提供的代碼,您可以輕鬆完成您的需求。正如我想你知道如何檢索其他行中單元格的值,可以將這些決定添加到代碼中。 –