我的背景相当于ASP.Net,我被要求开发一个小型的windows应用程序。我尝试使用网格来显示和选择数据,我认为在windows窗体中与ASP.Net的GridView等效的是DataGridView。我还不确定是否是这种情况,基本上,在ASP.Net中,您有与网格相关联的_RowCommand事件,该事件在单击Commandbutton后触发。我还注意到没有DataKeyNames属性,所以我不知道如何将当前的行键传递给单击的按钮。任何帮助都将不胜感激,谢谢!
我忘了提一下:我的网格有两个DataGridViewButton类型的列,并且我不知道需要在哪个事件上编码才能执行选定的命令
发布于 2009-12-10 06:27:34
您要查找的事件是CellClick事件-使用DataGridViewButtonColumn,您实际上不会将事件处理程序与窗体上的其他按钮关联到特定按钮。
从单元格单击事件返回的事件参数中,您可以确定单击所在的行和列,以及要执行的操作。
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来说,这是一个很棒的资源
发布于 2009-12-10 06:07:39
DataGridView.CurrentRow获取选定的行。这就是你需要的吗?
发布于 2009-12-10 06:07:59
如果你是数据绑定的,你应该(通过.CurrentRow)访问所有的属性,通过将.CurrentRow.DataBoundItem转换为你需要的任何类型。否则,只需查看单元格,或者在添加行时针对行设置.Tag。
下面的示例显示了一个数据绑定DataGridView和几个按钮,用于提取所选行的数据:
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);
}
}
}还有其他的方法来处理点击事件,通常上面的大部分都是通过设计器来完成的,而不是像这样(但在代码片段中显示设计器代码是非常困难的)。
https://stackoverflow.com/questions/1877240
复制相似问题