Вот несколько вариантов я могу думать:
- , безусловно, проще всего добавить один
Column
для каждыйButton
. ())
- Из вас можно создать пользовательский тип ячейки, возможно, подкласс
Panel
с нужным Buttons
. Это включает в себя реализацию итерации IDataGridViewEditingControl
с по меньшей мере дюжиной полей и методов, а также два пользовательских класса, полученных из DataGridViewColumn
и DataGridViewCell
, и многое другое. Короче говоря, огромный количество работы! Для сложного управления редактированием, возможно, стоит того. Для нескольких Buttons
конечно нет! (Не рекомендуется!)
- Или вы могли бы поддельные
Buttons
от маленького владельца рисования магии в CellPainting
события. Смотри ниже..!
- Или вы можете добавить один сложный элемент управления за пределами
DataGridView
, который действует в текущей строке. обычный way!
Вот забавный пример, что владелец рисует четыре команды «Sidu» в 4-м Column
в виде DatagGridView DGV
:
private void Form1_Load(object sender, EventArgs e)
{
DGV.Rows.Add(12);
for(int i = 0; i< DGV.Rows.Count; i++)
{
DGV[0, i].Value = i;
DGV[1, i].Value = R.Next(1000);
DGV[2, i].Value = rights[R.Next(rights.Count)];
DGV[3, i].ReadOnly = true;
}
}
List<string> rights = new List<string>
{ "SIDU", "SID-", "SI-U", "S-DU", "SI--", "S--U", "S-D-", "S---" };
Dictionary<char, string> rightsTexts = new Dictionary<char, string>
{ { 'S', "Select" }, { 'I', "Insert" }, { 'D', "Delete" }, { 'U', "Update" } };
Random R = new Random(1);
private void DGV_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == 3 && e.RowIndex >= 0)
{
string r = DGV[2,e.RowIndex].Value.ToString();
StringFormat format = new StringFormat()
{ LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center};
int w = e.CellBounds.Width/4;
int y = e.CellBounds.Y + 1;
int h = e.CellBounds.Height - 2;
e.PaintBackground(e.CellBounds, false);
for (int i = 0; i < 4; i++)
{
int x = e.CellBounds.X + i * w;
Rectangle rect = new Rectangle(x, y, w, h);
ControlPaint.DrawButton(e.Graphics, rect, ButtonState.Normal);
if (rightsTexts.ContainsKey(r[i]))
e.Graphics.DrawString(rightsTexts[r[i]], DGV.Font,
SystemBrushes.WindowText, rect ,format);
}
e.Handled = true;
}
}
private void DGV_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == 3 && e.RowIndex >= 0)
{
DataGridViewCell cell = DGV[e.ColumnIndex, e.RowIndex];
int w = cell.Size.Width;
int buttonIndex = e.X * 4/w;
Text = rightsTexts.ElementAt(buttonIndex).Value;
}
}
Розыгрыша материал был выброшен вверх, а q & d, так что вы могли бы инвестировать намного больше внимания, чтобы его точно настроить.
Я выбрал отображение прав в видимой ячейке для демострата ион. Для производства значение ячейки действия было бы очевидным местом.
Вам нужно будет добавить столбец типа «DataGridViewButtonColumn» для команды __each__. Многие примеры здесь и здесь. – TaW
Возможный дубликат [Как добавить кнопку в столбец в DataGridView] (http://stackoverflow.com/questions/21191950/how-to-add-a-button-to-a-column-in-the-datagridview) – TaW
Спасибо, но я думаю, что моя проблема немного отличается, мне нужно добавить несколько кнопок, т. е. панель кнопок (например, «Обновление», «Удалить», «Редактировать», «Просмотр») Как я могу добавить панель кнопок, каждая из которых имеет разные действия. –