WIN FORM中如何点DataGird中某一个单元格来选种这1行????
我想通过点DataGird中某一个单元格来选中这一行,并且取出这一行中各个单元的数据!
请问如何实现???
问题点数:20、回复次数:7Top
1 楼ppdty()回复于 2005-12-21 17:24:44 得分 0
绑定的数据源中添加一列作为主键,在datadrid中点击了之后去找这一行所属的主键,找到后回过来去帮定的数据源里根据主键把整行的值读出来Top
2 楼cc_net(念念红尘)回复于 2005-12-21 17:48:18 得分 0
点击是触发什么事件呢????
Top
3 楼zhjchinese(学习学习在学习)回复于 2005-12-21 17:59:21 得分 10
我是这样完成的哈:
在datagrid的MouseUp中写如下代码
string str_lr = "";
DataGrid.HitTestInfo myHitTest;//按下的行列
myHitTest = dataGrid1.HitTest(e.X,e.Y);//获取鼠标单击的行列号
int i_column = 3;//列数,根据数据绑定时可得到 if(myHitTest.Row >= 0)//得到选中行的数据
{
for (int i=0;i<i_column;i++)
{
if(i == i_column - 1)
{
str_lr += dataGrid1[myHitTest.Row,i].ToString().Trim().Replace("@","@");
}
else
{
str_lr += dataGrid1[myHitTest.Row,i].ToString().Trim() + "@";
}
}
}
MessageBox.Show(str_lr);
dataGrid1.Select(myHitTest.Row);//选定整行Top
4 楼zhzuo(秋枫)回复于 2005-12-22 21:57:44 得分 0
取出DataGrid当前行对应的DataTable的值。
如果DataGrid绑定的是DataView,
DataRowView drv = (DataRowView)this.BindingContext[this.ds,this.ds.Tables[0].TableName].Current;
//如果绑定的是DataTable
//DataRow dw = (DataRow)this.BindingContext[this.dataGrid1.DataSource,this.dataGrid1.Memeber].Current;
获取到drv就可以改数据,
DataRow dw = drv.Row; // 得到DataRow,
DataTable dt = dw.Table;//得到DataTable
DataSet ds = dt.DataSet; Top
5 楼xrwang(无涯)回复于 2005-12-23 08:54:12 得分 0
对,就用zhjchinese(学习学习在学习)的HitTestTop
6 楼yuqi508(毛路)回复于 2005-12-23 09:21:25 得分 5
我做过:需要两个事件实现---用CuurentCellChanged事件也可以
Private Sub grdCaseInfo_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles grdCaseInfo.MouseDown
Try
'''处理
If e.Button = MouseButtons.Left Then '左键点击
' Me.gpbCaseInfo.Focus() '转移焦点
Dim objHitTest As System.Windows.Forms.DataGrid.HitTestInfo 'DataGrid的点击信息
objHitTest = Me.grdCaseInfo.HitTest(e.X, e.Y) '取得鼠标点击信息(列号,行号)
M_intRowIndex = -1 '初始化为-1
If objHitTest.Type <> DataGrid.HitTestType.None Then '点击不是空白处
If objHitTest.Row <> -1 Then '有选中的行索引
M_intRowIndex = objHitTest.Row '存放选中的行索引
End If
ElseIf objHitTest.Type = DataGrid.HitTestType.None Then '点击空白处
Me.grdCaseInfo.UnSelect(Me.grdCaseInfo.CurrentRowIndex) '取消选中当前行
End If
End If
'''异常处理
Catch ex As Exception
ProjectException.ShowErrMsg(Me.Name, "grdCaseInfo_MouseDown", ex.Message)
End Try
End Sub
---------------------------------
Private Sub grdCaseInfo_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles grdCaseInfo.MouseUp
Try
'''处理
If e.Button = MouseButtons.Left Then '左键UP
If M_intRowIndex >= 0 And M_intRowIndex <= Me.grdCaseInfo.VisibleRowCount - 1 Then '索引在grdCaseInfo是有效行索引
Me.grdCaseInfo.Select(M_intRowIndex) '设置DataGride选中行
End If
End If
'''异常处理
Catch ex As Exception
ProjectException.ShowErrMsg(Me.Name, "grdCaseInfo_MouseUp", ex.Message)
End Try
End Sub
Top
7 楼ysgan(阿甘)回复于 2005-12-23 09:57:53 得分 5
private void dataGrid1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
DataGrid.HitTestInfo myHitTest;//按下的行列
myHitTest =this.dataGrid1.HitTest(e.X,e.Y);//获取鼠标单击的行列号
this.textBox1.Text=this.dataGrid1[myHitTest.Row,0].ToString().Trim();
this.textBox2.Text=this.dataGrid1[myHitTest.Row,1].ToString().Trim();
this.textBox3.Text=this.dataGrid1[myHitTest.Row,2].ToString().Trim();
this.textBox4.Text=this.dataGrid1[myHitTest.Row,3].ToString().Trim();
this.textBox5.Text=this.dataGrid1[myHitTest.Row,4].ToString().Trim();
dataGrid1.Select(myHitTest.Row);//选定整行
}Top




