代码之家  ›  专栏  ›  技术社区  ›  Alister

在winforms中跨多个窗体共享DataTable

  •  0
  • Alister  · 技术社区  · 16 年前

    我正在尝试编写一个简单的Compact Framework winforms应用程序。主窗体有一个绑定到DataTable的DataGrid(包含来自xml文件的数据)。我想调出另一个显示当前记录详细信息的表单。我有如下代码作为详细表单的构造函数。

    public DetailsForm(DataTable dtLandlords, int Index) //the constructor
    {
      InitializeComponent();
      lLandlordCode.DataBindings.Add("Text", dtLandlords, "LandlordID");
      .......
    }
    

        Form frm = new LandlordDetailsForm(dtLandlords, dataGrid1.CurrentRowIndex);
        frm.Show();
    

    如何让它显示当前记录(在索引中指定-当前未使用),而不仅仅是第一条记录。或者我应该用更好的方法来做这件事吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Tetraneutron    16 年前

    数据绑定“绑定”到提供的“视图”,目前您绑定到DataTable而不设置默认视图(因此它将默认为完整的表)。房东。默认视图。RowFilter=“Landlord=TheIdYouWant”;

    另一种方法是将DataGrid/GridView本身添加到DataBings中,这将提供一个包含其当前选定项的默认视图。

    编辑:添加了绑定到DataGridView的示例

    首先,使用TextBox和DataGridView(默认名称)创建一个表单。然后将此代码放入表单的构造函数中。

    DataTable dt = new DataTable();
    dt.Columns.Add("Col1");
    dt.Columns.Add("Col2");
    DataRow dr;
    dr = dt.NewRow();
    dr[0] = "C1R1";
    dr[1] = "C2R1";
    dt.Rows.Add(dr);
    dr = dt.NewRow();
    dr[0] = "C1R2";
    dr[1] = "C2R2";
    dt.Rows.Add(dr);
    dr = dt.NewRow();
    dr[0] = "C1R3";
    dr[1] = "C2R3";
    dt.Rows.Add(dr);
    
    this.dataGridView1.DataSource = dt;
    this.textBox1.DataBindings.Add("Text", dataGridView1.DataSource, "Col1");
    

    然后运行,选择GridView中的项目,TextBox应自动更新所选的详细信息。注意:我在这里使用了DataGridView,我假设它也适用于DataGrid(我认为你正在使用)

    推荐文章