WinForm DataGrid 点击问题!!!

builder666666 2005-11-17 05:27:58
当点击DataGrid中的某行或某个Cell时(DataGrid中的数据是通过DataSet得到的),能弹出一个对话框,这个对话框能显示点击的这一行的所有子段信息,请问各位仁兄,应该如何实现???
谢谢!!!
...全文
227 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoyawei 2005-12-23
  • 打赏
  • 举报
回复
private void dataGrid1_Click(object sender, System.EventArgs e)
{
}
可以声名这个函数,之后实现它就可以了
声名:this.dataGrid1.Click += new System.EventHandle(this.dataGrid1_Click)
datauser 2005-11-18
  • 打赏
  • 举报
回复
CurrentCellChanged中获取你选中行的值,再传给你要弹出的对话框
builder666666 2005-11-18
  • 打赏
  • 举报
回复
怎么没有人?给点思路也行呀!!!谢谢!
builder666666 2005-11-18
  • 打赏
  • 举报
回复
哦!理解啦,我的代码有问题,关键是在这里
dataGrid1.DataSource = dataSet.Tables[0].DefaultView;<---这里有问题,为什么这样不行呢?
应该改为 dataGrid1.DataSource = dataSet;
但为什么要这样做呢?

谢谢!各位的热心帮忙!
skywarrior 2005-11-18
  • 打赏
  • 举报
回复
JasonHeung 的代码就是完全正确的, 在自己研究一下吧, 你的dataGrid的数据源是dataView, myBind = this.BindingContext[dataSet,"Book"]指向的是dataTable
builder666666 2005-11-18
  • 打赏
  • 举报
回复
能否给一个例子:builder666666@sina.com.cn
谢谢!
builder666666 2005-11-18
  • 打赏
  • 举报
回复
好像不行呀?能否给个例子,谢谢!我的代码如下:
点击了DataGrid上的某行后,MessageBox并没有弹出!!!

static void Main()
{
Application.Run(new Form1());
}

private void button1_Click(object sender, System.EventArgs e)
{
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.mdb";
conn = new OleDbConnection(connStr);
command = conn.CreateCommand();
command.CommandText = "Book";
command.CommandType = CommandType.TableDirect;
adapter = new OleDbDataAdapter(command);
dataSet = new DataSet("Book");
adapter.Fill(dataSet,"Book");
dataGrid1.ReadOnly = true;
dataGrid1.DataSource = dataSet.Tables[0].DefaultView;

myBind = this.BindingContext[dataSet,"Book"];
myBind.CurrentChanged += new EventHandler(myBind_CurrentChanged);
//MessageBox.Show(Path.GetFullPath("."));
}

private void myBind_CurrentChanged(object sender, System.EventArgs e)
{
MessageBox.Show("ok");
}

private void dataGrid_Click(object sender, System.EventArgs e)
{

}
JasonHeung 2005-11-18
  • 打赏
  • 举报
回复
void Form1_Load(...)
{
myBindingManagerBase = this.BindingContext[dsUpdate,dsUpdate.Tables[0].TableName];
myBindingManagerBase.CurrentChanged += new EventHandler(myBindingManagerBase_CurrentChanged);
}

private void myBindingManagerBase_CurrentChanged(object sender, EventArgs e)
{
//在这里处理

if (null != CurrentRow)
{
}
}

BindingManagerBase myBindingManagerBase;
/// <summary>
/// 返回当前行
/// </summary>
/// <returns></returns>
protected DataRow CurrentRow
{
get
{
if (null == myBindingManagerBase || myBindingManagerBase.Position == -1)
{
return null;
}
else
{
return ((DataRowView)myBindingManagerBase.Current).Row;
}
}
}

止戈而立 2005-11-18
  • 打赏
  • 举报
回复
CurrentCellChanged用这个事件写的话。。
排序后的值不会错的。。
builder666666 2005-11-18
  • 打赏
  • 举报
回复
能否具体点,我的意思是,点击DataGrid的某一行或某一个Cell时,但是只要点击了DataGrid中表头的排序,获得的值就不对了。请指点!!!
builder666666 2005-11-17
  • 打赏
  • 举报
回复
ding

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧