首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows DataGridView _RowCommand

Windows DataGridView _RowCommand
EN

Stack Overflow用户
提问于 2009-12-10 06:04:56
回答 3查看 3.4K关注 0票数 3

我的背景相当于ASP.Net,我被要求开发一个小型的windows应用程序。我尝试使用网格来显示和选择数据,我认为在windows窗体中与ASP.Net的GridView等效的是DataGridView。我还不确定是否是这种情况,基本上,在ASP.Net中,您有与网格相关联的_RowCommand事件,该事件在单击Commandbutton后触发。我还注意到没有DataKeyNames属性,所以我不知道如何将当前的行键传递给单击的按钮。任何帮助都将不胜感激,谢谢!

我忘了提一下:我的网格有两个DataGridViewButton类型的列,并且我不知道需要在哪个事件上编码才能执行选定的命令

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-10 06:27:34

您要查找的事件是CellClick事件-使用DataGridViewButtonColumn,您实际上不会将事件处理程序与窗体上的其他按钮关联到特定按钮。

从单元格单击事件返回的事件参数中,您可以确定单击所在的行和列,以及要执行的操作。

代码语言:javascript
复制
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{        
    DataGridViewButton cell = (DataGridViewButtonCell)
        dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];

    // Any additional logic you want
}

除此之外,我认为退后一步并思考winforms和webforms编码范例之间的差异会让您真正受益。

在webforms中,你编写代码的很多方式都是由这样一个事实决定的,那就是一切都是无状态的。winforms并非如此,你有状态,当你需要找出关于它们的信息时,你可以访问大多数控件。

因此,在winforms中检索像DataGridView中当前选定的单元格这样的信息是很容易的。

此外,在winforms的大多数情况下,您不需要特定的按钮来编辑或删除-您可以直接在网格中编辑,并在内置的删除功能中使用(选择行并按delete键)。

一个能让你克服一些障碍的好地方可能是DataGridView FAQ。对于学习DataGridView来说,这是一个很棒的资源

票数 0
EN

Stack Overflow用户

发布于 2009-12-10 06:07:39

DataGridView.CurrentRow获取选定的行。这就是你需要的吗?

票数 0
EN

Stack Overflow用户

发布于 2009-12-10 06:07:59

如果你是数据绑定的,你应该(通过.CurrentRow)访问所有的属性,通过将.CurrentRow.DataBoundItem转换为你需要的任何类型。否则,只需查看单元格,或者在添加行时针对行设置.Tag

下面的示例显示了一个数据绑定DataGridView和几个按钮,用于提取所选行的数据:

代码语言:javascript
复制
using System;
using System.ComponentModel;
using System.Windows.Forms;
class Person
{
    public string Name { get; set; }
    [DisplayName("Eye Color")]
    public string EyeColor { get; set; }
}
static class Program
{   
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        using (var form = new Form())
        using (var grid = new DataGridView { Dock = DockStyle.Fill})
        using (var btn1 = new Button { Dock = DockStyle.Bottom, Text = "Button 1"})
        using (var btn2 = new Button { Dock = DockStyle.Bottom, Text = "Button 2" })
        {

            btn1.Click += delegate
            {
                form.Text = "Button 1 clicked";
                if (grid.CurrentRow != null)
                {
                    form.Text += ": " + ((Person)grid.CurrentRow.DataBoundItem).Name;
                }
            };
            btn2.Click += delegate
            {
                form.Text = "Button 2 clicked";
                if (grid.CurrentRow != null)
                {
                    form.Text += ": " + ((Person)grid.CurrentRow.DataBoundItem).Name;
                }
            };
            form.Controls.Add(btn1);
            form.Controls.Add(btn2);
            form.Controls.Add(grid);
            var data = new BindingList<Person>
            {
                new Person { Name = "Fred", EyeColor = "green"},
                new Person { Name = "Barney", EyeColor = "brown"},
                new Person { Name = "Wilma", EyeColor = "blue"},
                new Person { Name = "Betty", EyeColor = "blue"},
            };
            grid.DataSource = data;
            Application.Run(form);
        }
    }
}

还有其他的方法来处理点击事件,通常上面的大部分都是通过设计器来完成的,而不是像这样(但在代码片段中显示设计器代码是非常困难的)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1877240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档