2010-12-27 5 views
0

Я в настоящее время использую DataGridView с combobox как свою ячейку в форме окна, и я хочу, когда бы я ни выбрал какой-либо новый элемент в этом поле со списком, я получу сообщение, что я выбрал новый элемент. Может ли кто-нибудь рассказать, какой обработчик событий мне нужно привязать к DataGridView, чтобы это сделать?Вопрос о событии DataGridView

ответ

1

попробовать это

вы можете использовать DataGridView EditingControlShowing событие

здесь вам нужно проверить тип управления из DataGridView Cell

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl)) 
    { 
     ComboBox cmb = (ComboBox)e.Control; 
     cmb.SelectedIndexChanged += new EventHandler(cmb_SelectedIndexChanged); 
    } 
} 

и в t он SelectedIndexChanged из Combobox

void cmb_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     //throw new NotImplementedException(); 
     ComboBox cmbSender = (ComboBox)sender; 
     MessageBox.Show(cmbSender.Text.ToString()); 
    } 

Надеется, что это помогает

+0

Спасибо за вашу помощь. Это то, что мне нужно. – Justin

1

Чтобы уточнить, вы хотите отображать сообщение всякий раз, когда пользователь выбирает новый элемент в выпадающем списке?

Если это так, это не имеет никакого отношения к gridview, вы можете использовать javascript/jQuery для этого. Как так:

$("#GridView1 select").change(function() { 
    var x = $(this, 'option:selected').attr('value'); 
    alert(x); 
}); 

Я также полагаю, что вы смотрите на создание собственных GridViews, они прекрасно подходят для быстрого отображения информации для целей тестирования, но непрактичны продлить. Вы можете создать gridview в коде с помощью StringBuilder. Я использую LINQ to SQL в этом примере, но он показывает, как это сделать. Вместо использования resultSpan.InnherHtml + =, я предлагаю использовать построитель строк.

public void displayLinqCategory() 
{ 
    StoreDataContext dbm = new StoreDataContext(); 

    var query = dbm.Categories.Select(c=> new 
    { 
     Category = c, 
     subCategories = dbm.SubCategories.Where(s=> s.CategoryID == c.CategoryID) 
    }).OrderBy(c=> c.Category.Name); 


    resultSpan.InnerHtml += "<table class='tableStripe'>"; 
    resultSpan.InnerHtml += "<tr><th width='1%' colspan='2' style='text-align:left;'>ACTIVE</th><th style='text-align:left;'>NAME</th><th width='1%'>#Items</th></tr>"; 
    foreach (var result in query) 
    { 
     int i = result.Category.CategoryID; 
     string active = string.Empty; 
     bool s = result.Category.Active; 

     if (s == true) 
      active = "checked='checked'"; 
     else 
      active = ""; 


     string catBox = string.Format("<input class='categoryChk'value='{0}' type='checkbox' {1} />", i,active); 


     resultSpan.InnerHtml += "<tr><td>" + catBox + "</td><td colspan='2'><b>" + result.Category.Name + "</b></td><td></td></tr>"; 
     foreach (var sub in result.subCategories) 
     { 
      int si= sub.SubCategoryID; 
      string sActive = string.Empty; 
      bool subActive = sub.Active; 
      if(subActive == true) 
       sActive = "checked='checked'"; 
      else 
       sActive =""; 

      string subBox = string.Format("<input class='subCatChk' value='{0}' type='checkbox' {1} />", si, sActive); 
      resultSpan.InnerHtml += "<tr><td style='background:#FFF;'></td><td>"+subBox+"</td><td>" + sub.SubCategoryName + "</td><td></td></tr>"; 
     } 
    } 
    resultSpan.InnerHtml += "</table>";   
} 

и результат: alt text

+0

Это был WinForms вопроса ... Но сетка выглядит великолепно. – 26071986

+0

@ 26071986 К сожалению, я прочитал это и увидел веб-формы. Ugh все, что работает .. –

Смежные вопросы