首页 文章

DataGridView获取当前选定的对象

提问于
浏览
37

我需要从da数据绑定DataGridView获取当前选定的对象 .

我不需要当前所选单元格的对象,而是整行所基于的对象,在这种情况下,BusinessObject属性构成网格的列 .

我可以查看DataSource,但它本身只是一个对象,可以是BindingSource或IBindingList或类似的东西 - 所以不容易标准化的方式来获取想要的对象 .

在此之后需要检查businessObject以获取名为IsChanged的属性,并在绑定源选择下一个项目之前要求用户保存或放弃更改 . 因此,我必须找到DataGridView的RowValidating-Event内的当前对象,因为BindingSource不提供在更改发生之前停止更改的事件 . See here for the well known problem

谢谢阅读 ;-)

5 回答

  • 75

    既然你确实声明了IBindingList - 是的,因为其他人已经说过DataBoundItem属性会给你你需要的东西 - 我之前遇到过它的一个问题,最后得到一个空参考但是现在我想不到这个场景它发生在哪里 .

    如果您使用BindingSource进行数据绑定 - 您可以捕获BindingSource的CurrentChanged,CurrentItemChanged事件,那么您的B.O.上不需要额外的IsChanged属性 . ..,底层数据源也可以表示已修改 - 例如,如果绑定到数据表的BindingSource,该行将为您提供修改后的标志 .

  • 0

    您可以像这样获取所选的单元格值

    yourDGV.CurrentCell.Value;
    

    如果你想要String形式的值只是使用像这样的ToString()方法

    yourDGV.CurrentCell.Value.ToString();
    

    这应该做到这一点

  • 0

    DataGridViewRow.DataBoundItem 包含它绑定的'business'对象 .

  • 7

    这是我的代码把它放到你的Person类中

    public static explicit operator Person(DataRow dr)
        {
            Person p = new Person();
            p.adi = dr.ItemArray[0].ToString();
            p.id = Int32.Parse(dr.ItemArray[1].ToString());
            p.soyadi = dr.ItemArray[2].ToString();
            p.kartNo = dr.ItemArray[3].ToString();
            p.dogumTarihi = DateTime.Parse( dr.ItemArray[4].ToString() );
            p.adres = dr.ItemArray[5].ToString();
            p.meslek = dr.ItemArray[6].ToString();
            p.telefon = dr.ItemArray[7].ToString();
            p.gsm = dr.ItemArray[8].ToString();
            p.eposta = dr.ItemArray[9].ToString();
    
            return p;
        }
    

    这是一个更新按钮点击

    DataRow row = (dataGridView1.SelectedRows[0].DataBoundItem as DataRowView).Row;
    Person selected = (Person)row;
    
  • 1

    这个怎么样?

    foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
    {
      MessageBox.Show(item.Cells[0].Value.ToString());
    }
    

    我们可以获得多个选定的行数据 .

相关问题