我将窗体上的几个textbox控件绑定到了一个dataset上的一个datatable上。下边放一个datagrid也绑定到了这个数据源上,按条件显示其中一部分内容,点击datagrid的行时窗体上的textbox联动,用的是CurrencyManager滚动position的方式,运行是好的。但是在datatable中添加了一行后,可以得到填加行在datatable中的索引号,比如是5,但我把CurrencyManager滚动到第5行时窗体上的textbox控件显示的是第6行的内容,而滚动到最后一行时窗体上的textbox显示的才是我插入的内容,也就是说插入的行在datatable中号的索引是5,而插入的行在CurrencyManager的position属性是最后一行
请教,该如何插入的行在CurrencyManager的position属性也一样是5

解决方案 »

  1.   

    换种说法我的windows窗体上有若干个textbox控件,显示一个datatable里的字段,还有一个datagrid控件显示datatable里的一部分内容。单击datagrid控件里的行后,按主键得到这一行在datatable中的索引值,然后用CurrencyManager的position属性导航到这个索引值,textbox控件显示改行数据没有问题。当我向datatable里添加了一行后,datagrid也显示出了这一新行,单击这行后按主键得到这一行在datatable中的索引值,比如是5,然后用CurrencyManager的position属性导航到这个索引值(5),textbox控件显示的不是这一新行的内容,而显示的是datatable中新行下边的那一行。如果我用CurrencyManager的position属性导航到最后一行,textbox控件显示的才是插入的新行的内容也就是说,datatable中插入新行后,这一新行在CurrencyManager中的position位置是最后一行,这时我通过点击datagrid中的新行得到它在datatable的索引,然后滚动CurrencyManager中的position,实现窗体上的textbox控件内容同步就成问题了,求解
      

  2.   

    这样可以吗?//绑定数据
    SqlConnection conn = new SqlConnection("user id=sa;data source=localhost;persist security info=true;initial catalog=Northwind;password=sa");
    DataSet ds = new DataSet();
    string sql = "select top 10 CustomerID, CompanyName from Customers";
    SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
    adapter.Fill(ds);this.dataGrid1.SetDataBinding(ds, ds.Tables[0].TableName);
    this.BindControl(ds.Tables[0]);
    private CurrencyManager myCurrencyManager;
    private void BindControl(DataTable myTable)
    {
      textBox1.DataBindings.Add("Text", myTable, "CompanyName");
      myCurrencyManager = (CurrencyManager)this.BindingContext[myTable];
      myCurrencyManager.Position = 0;
    }//添加新行
    private void button2_Click(object sender, System.EventArgs e)
    {
      DataSet ds = (DataSet)this.dataGrid1.DataSource;
      DataTable table = ds.Tables[0];
      DataRow row = table.NewRow();
      row[0] = 1;
      row[1] = "我的公司";
      table.Rows.Add(row);}
    //同步数据
    private void dataGrid1_CurrentCellChanged(object sender, System.EventArgs e)
    {
      this.myCurrencyManager.Position = this.dataGrid1.CurrentCell.RowNumber;
    }
      

  3.   

    看看这里
    http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp