¿Hay alguna forma de agregar un control (por ejemplo, un botón) a una celda Winforms DataGridView en C#?Agregar un botón a Winforms DataGridView
(Lo que yo estoy apuntando es poner varios tipos de controles en diferentes celdas de la rejilla ...)
¿Hay alguna forma de agregar un control (por ejemplo, un botón) a una celda Winforms DataGridView en C#?Agregar un botón a Winforms DataGridView
(Lo que yo estoy apuntando es poner varios tipos de controles en diferentes celdas de la rejilla ...)
se puede hacer como esto ....
No tenemos dos maneras de hacer esto:
Vea mi código de ejemplo a continuación que ilustra los trucos.
Fragmento de código
private void Form5_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;
}
Mientras que el segundo método muestra el control, permanece estático cuando las celdas se desplazan. ¿Hay alguna forma de bloquear el nuevo control en la celda subyacente? – CrazyHorse
El primer método funcionó bien, el segundo hace que el control se "caiga" de la cuadrícula cuando se desplaza. Supongo que podrías usar el evento de formato para volver a moverlo. –
El DataGridViewButtonColumn
es un tipo de columna, siempre que contiene un botón que se pulse. Usted puede agregar sus propios controles a las células:
http://msdn.microsoft.com/en-us/library/7tas5c80.aspx
Tenga en cuenta que no siempre es trivial, pero he visto que alguien puso toda una DataGridView
en una célula - mirado raro.
Existen también otras columnas previstas:
DataGridViewButtonColumn
DataGridViewCheckBoxColumn
DataGridViewComboBoxColumn
DataGridViewImageColumn
DataGridViewLinkColumn
DataGridViewTextBoxColumn
puede cambiar estos en el editor de la columna en el diseñador de Visual Studio, o añadirlos en código para la colección de columnas.
Ah , ¿entonces estás diciendo que puedo agregar CUALQUIER tipo de control en un DataGridViewButtonColumn? Cuando me encontré con esto, pensé que era una columna llena de botones ;-) – Boris
@Boris No, no en la columna Botón, puede crear un tipo de columna que aloje cualquier control y agregar ese tipo de columna a la cuadrícula. Por ejemplo, puede hacer que DataGridViewNumericUpDownColumn aloje un control NumericUpDown. La columna está codificada para alojar un tipo de control particular, no es una decisión de tiempo de ejecución. –
Pero creo que todavía hay un malentendido: con este enfoque, ¿toda la columna obtiene el mismo tipo de control? Porque lo que me gustaría tener es un tipo diferente de control en cada célula. – Boris
me gustaría añadir que en el diseñador y hacer un campo de la plantilla. Una forma sencilla de ir y poner lo que quieras en el DataGridView
Ejemplo
<asp:DataGrid ID="somedatagrid" runat="server">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Button ID="somebutton" runat="server" Text="some button" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
Desafortunadamente la pregunta era sobre winforms, no sobre páginas .NET. – Zorgarath
http://stackoverflow.com/questions/6085930/add-button-column-in-a-databound-datagridview –