dataGrid的当前行问题

主  题:  dataGrid的当前行问题
作  者:  xshmeng (爽爽)  
等  级:  ^
信 誉 值:  100
所属论坛:  .NET技术 C#
问题点数:  80
回复次数:  11
发表时间:  2003-8-26 14:48:28

各位老哥,请问一下我把dataGrid连到DataSet的一个DataTable以后,如何取出当前行(当前光标所在的行)的DataRow对象来?



回复人: wd_318(饭加加) ( 五级(中级)) 信誉:100 2003-8-26 15:00:05 得分:60

DataRow dr;
BindingManagerBase bm = openner.dataGrid1.BindingContext[dataGrid1.DataSource, dataGrid1.DataMember];
dr = ((DataRowView)bm.Current).Row;
MessageBox.show(dr["字段名"].ToString());

回复人: yaoyaonet(绿洲) ( 四级(中级)) 信誉:100 2003-8-26 15:06:54 得分:4

ds.Tables[0].Rows[this.BindingContext[ds,"Table"].Position][字段名].ToString();

回复人: greenhill1(小山) ( 三级(初级)) 信誉:100 2003-8-26 15:56:58 得分:4

private void button1_Click(object sender, System.EventArgs e)
{
    if ((this.BindingContext[this.thisDataSet, "班级"].Count > 0))
    {
        SqlConnection thisConnection = new SqlConnection(@"Data Source=SERVER;User ID=sa;Password=;Initial Catalog=dx");
        thisConnection.Open();
        SqlDataAdapter thisAdapter = new SqlDataAdapter("SELECT * FROM 班级", thisConnection);
        SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);
        DataSet thisDataSet = new DataSet();
        thisAdapter.Fill(thisDataSet, "班级");
        DataRow findRow = thisDataSet.Tables["班级"].Rows[CellNu];
        findRow.Delete();
        thisAdapter.Update(thisDataSet, "班级");
        thisConnection.Close();
    }
    else
    {
        MessageBox.Show("没有班级可以删除!");
    }
}

private void grd班级_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
    Point pt = new Point(e.X, e.Y);
    DataGrid.HitTestInfo hit = grd班级.HitTest(pt);
    if (hit.Type == DataGrid.HitTestType.Cell)
    {
        grd班级.Select(hit.Row);
    }
    CellNu = grd班级.CurrentCell.RowNumber;
}

以上是用鼠标点击某行,然后选中datagrid的某行,然后点击"删除"将你点击的那条记录删除的代码。看看有没有你想要的功能!CellNu=grd班级.CurrentCell.RowNumber这一句获得了你选择的那行的位置。

回复人: greenhill1(小山) ( 三级(初级)) 信誉:100 2003-8-26 16:02:26 得分:4

this.BindingContext[this.thisDataSet,"学生"].Position这个是获得当前行的行号。比如datagrid的第一行,这个代码则返回0,第二行,返回1。

回复人: superzuoluo(球星) ( 四级(中级)) 信誉:100 2003-8-26 16:04:27 得分:4

这个简单
((DataTable)dataGrid1.DataSource).Rows[dataGrid1.CurrentRowIndex]

回复人: wjohenw(CSharp) ( 二级(初级)) 信誉:100 2003-8-26 16:29:32 得分:2

呵呵,都这么快

回复人: xshmeng(爽爽) ( 一级(初级)) 信誉:100 2003-8-26 16:32:06 得分:0

不可,我感觉DataTable和DataGrid的索引方式不同,所以不用用Rows[int i]这种方式,因为一旦将表格按别的列排一下序,这种方式就不行了。

回复人: greenhill1(小山) ( 三级(初级)) 信誉:100 2003-8-26 16:37:32 得分:2

可以排序后根据字段信息来查找啊。

回复人: wd_318(饭加加) ( 五级(中级)) 信誉:100 2003-8-26 16:48:06 得分:0

老大,我那段程序是不怕重新排序的呀,
原来我以为这事,在网上找了一星期才找到的方法!

回复人: wd_318(饭加加) ( 五级(中级)) 信誉:100 2003-8-26 16:51:20 得分:0

晕,原来我没改好,还是用多了openner!(我原来是用来操作别的窗口数据的,呵)

DataRow dr;
BindingManagerBase bm = dataGrid1.BindingContext[dataGrid1.DataSource, dataGrid1.DataMember];
dr = ((DataRowView)bm.Current).Row;
MessageBox.show(dr["字段名"].ToString());

回复人: xshmeng(爽爽) ( 一级(初级)) 信誉:100 2003-8-26 16:54:52 得分:0

wd_318(饭加加) 老兄,你的办法没有问题,很好,我很高兴。感谢。望多光临。

该问题已经结贴 ,得分记录: wd_318 (60)、 yaoyaonet (4)、 greenhill1 (4)、 greenhill1 (4)、 superzuoluo (4)、 wjohenw (2)、 greenhill1 (2)、

Contributors: FHL