2015-04-20 5 views
0

У меня есть DataGridView в моей программе, которая имеет DataGridViewButtonColumn. Когда пользователь нажимает на эту кнопку, он показывает больше деталей на другой панели.C# DataGridViewButtonColumn auto click

У меня возникают проблемы, пытаясь сделать следующее:

Нажмите на кнопку «отправить» на экране заказа, который будет отправлять заказ в базу данных, и DataGridView будет автоматически обновляться, но пользователю все равно будет нужно щелкнуть по соответствующей кнопке столбца в строке, чтобы просмотреть более подробную информацию.

Что я хочу сделать, так это то, что когда пользователь нажмет кнопку «Отправить», он автоматически найдет строку, соответствующую идентификатору orderID, и автоматически щелкнет эту кнопку.

это то, что у меня есть:

foreach(DataGridViewRow row in OutOrderListGridView.Rows){ 
       string compareID = row.Cells[0].Value.ToString(); 
       if (compareID == OrderID) 
       { 
        row.Cells[10].Selected = true; <-- here i want to performClick() on the columnbutton(cell[10]) on the specific row. 
       } 
      } 

Спасибо.

+0

Имеет ли каждая строка свою кнопку «Отправить»? WinForms или WPF? – Dasanko

+0

WindForms, каждая строка имеет свою кнопку, пусть говорит, что я хочу нажать кнопку 5-го уровня, которая находится в столбце 10, я бы хотел выполнить щелчок на этой кнопке. Я знаю, что для обычных кнопок есть performclick() для обычных кнопок, но мне нравится делать то же самое в столбце –

ответ

1

Я не уверен на 100%, я вполне понимаю, что вы после, но если я прав, вы хотите сделать следующее, если событие CellClick обрабатывает все, что вы пытаетесь достичь в конечном итоге.

Вместо того, чтобы «выполнять» щелчок (PerformClick()) как таковой, вы можете поднять событие вручную с известными значениями ... Это должно сработать для вас, но немного непроверено в вашем конкретном приложении с заданными неизвестными переменными. Приведенный ниже код также должен был быть слегка переработан для удовлетворения потребностей.

for (int i = 0; i < OutOrderListGridView.RowCount; i++) 
    { 
     if (OutOrderListGridView[0, i].Value.ToString() == OrderID) 
     { 
      OutOrderListGridView_CellClick(OutOrderListGridView, new DataGridViewCellEventArgs(10, i)); 
      break; 
     } 
    } 

Цикл foreach должен был быть изменен на for петли для того, чтобы использовать текущий индекс (положение цикла), что foreach цикл не обеспечивает.

Сравнение строк не обязательно должно быть двух ступеней, поэтому было сжато соответственно.

Я также добавил break в цикл, как я мог бы подумать, что как только вы найдете совпадение, было бы бессмысленно проходить через оставшиеся строки.

+0

спасибо за ответ, я проверю его, как только вернусь к своему компьютеру –

+1

Это похоже на то, что я думал решение должно быть. Только одно редактирование: для 'DataGridViewButtonColumn' вы должны использовать' CellContentClick' vs 'CellClick', как хорошо объяснено [здесь] (http://stackoverflow.com/a/13687844/3773066). – OhBeWise

+0

@OhBeWise Хорошая точка. Я предполагаю, что в конце дня он будет реализован, но нажатие кнопки ячейки было обработано в первую очередь, но +1 для использования CellContentClick over CellClick – RussDunn