我用bindingsource绑定的数据,在datagridview中获取选定行的记录,为什么是空值?
绑定数据的代码(string strSQL = "select * from table";
DataTable dataTable = CT.dataBase.GetDataTable(strSQL);
BindingSource dataSource = new BindingSource(dataTable, null);
datagridview1.DataSource = dataSource;)
使用上面方法  string name = dataGridView1.SelectedCells[1].Value.ToString();
  string name = dataGridView1.Rows[1].Cells[1].Value.ToString();
这name变量获取不到值;如果绑定数据代码改为
(string strSQL = "select * from table";
DataTable dataTable = CT.dataBase.GetDataTable(strSQL);
datagridview1.DataSource = dataTable;)
变时NAME就可以获得值;同样也是使用
string name = dataGridView1.SelectedCells[1].Value.ToString();
string name = dataGridView1.Rows[1].Cells[1].Value.ToString();这是什么原因?哪个高手帮忙解决一下;

解决方案 »

  1.   

    反正我一贯反感从DataGridView这样的控件上“扣”数据的作法。这感觉这种作法太初级了。
    你看看winform,asp.net, wpf/silverlight的示例代码,绝大多数都是根据控件所绑定的数据源的“当前位置”来取得所谓“当前行”的数据。
      

  2.   

    从DATAGRIDVIEW上"扣"数据的做法,有时也是必要的;像CXGRID中的导出EXCEL就是用这种方法;不必动用后台数据源,直接就可以把GRID上显示的数据导出;
      

  3.   

    BindingSource dataSource = new BindingSource(dataTable, null);没用过!不要这句代码就是正确的!我一般就不用BindingSource!
      

  4.   

    new BindingSource(Object dataSource, String dataMember);dataSource
    Type: System.Object
    The data source for the BindingSource.dataMember
    Type: System.String
    The specific column or list name within the data source to bind to.你的代码是-----BindingSource dataSource = new BindingSource(dataTable, null);
    dataMember 为Null
    绑定之后才没值的。
      

  5.   

    1、你可以直接datagridview1.DataSource = dataTable;绑定。2、但是如果你非要动态通过BindingSource来绑定,这样也可以:
      BindingSource dataSource = new BindingSource();
      dataSource.DataSource = dataTable;
      datagridview1.DataSource = dataSource;3、如果你还是要用你的那种办法,可以看下下面的:
       DataSet myDataSet = new DataSet("myDataSet");
       DataTable tableCustomers = new DataTable("Customers");
       myDataSet.Tables.Add(tableCustomers);
       // Insert code to populate the DataSet.   // Set DataSource and DataMember with SetDataBinding method.
       string member;
       // The name of a DataTable is Customers.
       member = "Customers";
       dataGrid1.SetDataBinding(myDataSet, member);
      

  6.   

    如果我只是为了获取数据,可以直接用datagridview1.DataSource = dataTable;问题是要实现EXCEL那种功能,需要用到BINDINGSOURCE;  BindingSource dataSource = new BindingSource();
      dataSource.DataSource = dataTable;
      datagridview1.DataSource = dataSource;
    这方法试过了,跟bindingsource datasource=new bindingsource(datatable,null)一样的结果;在GRIDVIEW上可以显示数据;就是获取不到选中行的数据;3、如果你还是要用你的那种办法,可以看下下面的:
       DataSet myDataSet = new DataSet("myDataSet");
       DataTable tableCustomers = new DataTable("Customers");
       myDataSet.Tables.Add(tableCustomers);
       // Insert code to populate the DataSet.   // Set DataSource and DataMember with SetDataBinding method.
       string member;
       // The name of a DataTable is Customers.
       member = "Customers";
       dataGrid1.SetDataBinding(myDataSet, member);这种方法试过了,不能实现DATAGRIDVIEW像EXCEL里面那种筛选功能;
      

  7.   

    不明白你的筛选功能是要实现什么……            DataTable dt = new DataTable("Customers"); 
                dt.Columns.Add("B1",typeof(string)); 
                dt.Columns.Add("B2",typeof(string));
                dt.Columns.Add("B3", typeof(string));
                dt.Rows.Add("1", "21", "31");
                dt.Rows.Add("2", "22", "32");
                dt.Rows.Add("3", "23", "33");            DataSet myDataSet = new DataSet("myDataSet");
                myDataSet.Tables.Add(dt);
                // Insert code to populate the DataSet.
                // Set DataSource and DataMember with SetDataBinding method.
                string member;
                // The name of a DataTable is Customers.
                member = "Customers";
                BindingSource bs = new BindingSource(myDataSet, member);
                dataGridView2.DataSource = bs;我用上面那个方法是能获取到选定行记录的。
      

  8.   

    我的筛选功能就像CXGRID,XTRAGRID那种列标题可以有下拉框那种筛选功能;现在已经实现了;那选中行的数据获取问题也解决了,跟BINDINGSOURCE无关,就是用这种 BindingSource bs = new BindingSource(dataTable, null);后面一个参数为空也行了;当时获取不到值,是因为重写datagridview,实现下拉框时有点问题,导致取不到数据;不过还是感谢你的解答;把分加给你