关于DataGridView事件的问题

时间:2010-12-27 09:13:58

标签: c# .net winforms

我目前正在使用带有组合框的DataGridView作为其窗体中的单元格,我希望每当我在该组合框中选择任何新项目时,我都会收到一条消息,说明我选择了新项目。任何人都可以告诉我应该将哪个事件处理程序绑定到DataGridView以确保这个?

2 个答案:

答案 0 :(得分:1)

为了澄清,您想在用户选择组合框中的新项目时显示消息吗?

如果是这样,这与gridview无关,你可以使用javascript / jQuery来做到这一点。像这样:

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

我还建议您考虑创建自己的网格视图,它们非常适合快速显示信息以用于测试目的,但扩展不实用。您可以使用StringBuilder在代码后面创建gridview。我在这个例子中使用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

答案 1 :(得分:1)

试试这个

您可以使用DataGridView EditingControlShowing Event

这里需要检查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);
    }
}

和Combobox的SelectedIndexChanged

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

希望这有帮助