Вопрос о событии DataGridView - PullRequest
       2

Вопрос о событии DataGridView

0 голосов
/ 27 декабря 2010

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

Ответы [ 2 ]

1 голос
/ 27 декабря 2010

попробуйте

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

здесь необходимо проверить тип элемента управления ячейки DataGridView

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);
    }
}

и в SelectedIndexChanged из комбинированного списка

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

Надеюсь, это поможет

1 голос
/ 27 декабря 2010

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

Если это так, это не имеет ничего общего с gridview, вы можете использовать javascript / jQuery для этого,Вот так:

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

Я также предлагаю вам взглянуть на создание своих собственных видов сетки, они отлично подходят для быстрого отображения информации в целях тестирования, но их непрактично расширять.Вы можете создать свое сеточное представление в коде с помощью 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...