【问题标题】:refreshing DataSource Master-Detail XtraGrid刷新 DataSource Master-Detail XtraGrid
【发布时间】:2018-06-30 10:02:15
【问题描述】:

我有这段代码可以在运行时创建 Master-Detail XtraGrid

    public partial class FRM_Reserved : DevExpress.XtraEditors.XtraForm
{
    DataTable Table1 = new DataTable("Table1");
    DataTable Table2 = new DataTable("Table2");
    DataSet dataSet = new DataSet();

    public FRM_Reserved()
    {
        InitializeComponent();

        Table1 = ord.Get_Orders();
        Table2 = ord.Get_Order_Res();
        dataSet.Tables.Add(Table1);
        dataSet.Tables.Add(Table2);

        dataSet.Relations.Add("OrderDetails",
        dataSet.Tables["Table1"].Columns["Bon N"],
        dataSet.Tables["Table2"].Columns["Bon N"]);

        gridControl3.DataSource = dataSet.Tables["Table1"];

    }

我想通过单击按钮刷新 DataSource,所以我添加了此代码

        private void btnRefresh_Click(object sender, EventArgs e)
    {

        Table1 = ord.Get_Orders();
        Table2 = ord.Get_Order_Res();
        dataSet.Tables.Add(Table1);
        dataSet.Tables.Add(Table2);


        gridControl3.DataSource = dataSet.Tables["Table1"];
        gridControl3.ForceInitialize();

    }

但是代码不起作用,请您帮帮我。

【问题讨论】:

    标签: c# winforms devexpress gridcontrol


    【解决方案1】:

    试试下面的代码。希望有效

      private void btnRefresh_Click(object sender, EventArgs e)
                {
                   gridControl3.DataSource=null;
            gridControl3.Items.Clear();
                    Table1 = ord.Get_Orders();
                    Table2 = ord.Get_Order_Res();
                    dataSet.Tables.Add(Table1);
                    dataSet.Tables.Add(Table2);
    
    
                    gridControl3.DataSource = dataSet.Tables["Table1"];
                    gridControl3.ForceInitialize();
    
            }
    

    【讨论】:

    • 不幸的是我找不到 gridControl3.Items.Clear();当我尝试使用 gridControl3.RepositoryItems.Clear(); 代码不起作用
    【解决方案2】:

    问题在于每次更改的表名称

    dataSet.Tables[(Table1.TableName)]
    dataSet.Tables[(Table2.TableName)]
    

    所以我做了这个改变

            private void simpleButton1_Click(object sender, EventArgs e)
        {
    
            dataSet.Relations.Clear();
            dataSet.Tables["Table2"].Clear();
            dataSet.Tables["Table1"].Clear();
    
    
            Table1 = ord.Get_Orders();
            Table2 = ord.Get_Order_Res();
            dataSet.Tables.Add(Table1);
            dataSet.Tables.Add(Table2);
    
            dataSet.Relations.Add("OrderDetails",
            dataSet.Tables[(Table1.TableName)].Columns["Bon N"],
            dataSet.Tables[(Table2.TableName)].Columns["Bon N"]);
            gridControl3.DataSource = dataSet.Tables[(Table1.TableName)];
            gridControl3.ForceInitialize();
        }
    

    谢谢你帮助我

    【讨论】:

      【解决方案3】:

      使用以下代码

      gridControl3.DataSource = dataSet.Tables["Table1"];
      gridControl3.RefreshDataSource();
      

      试试这个

      private void button1_Click(object sender, EventArgs e)
      {
      
          var ds = new DataSet();
          var dt1 = GetTable1Data();
          var dt2 = GetTable2Data();
      
          ds.Tables.Add(dt1);
          ds.Tables.Add(dt2);
      
          ds.Relations.Add("RelationTable",
             ds.Tables["Table1"].Columns["col1"],
             ds.Tables["Table2"].Columns["col1"]);
      
          gridControl1.DataSource = ds.Tables["Table1"];
          gridControl1.RefreshDataSource();
      }
      
      private DataTable GetTable1Data()
      {
          using (var conn = new SqlConnection("Conneciton string goes here"))
          {
              conn.Open();
              using (var cmd = new SqlCommand("Stored procedure name goes here", conn))
              {
                  cmd.CommandType = CommandType.StoredProcedure;
                  var dt = new DataTable();
                  dt.Load(cmd.ExecuteReader());
                  return dt;
              }
          }
      }
      
      private DataTable GetTable2Data()
      {
          using (var conn = new SqlConnection("Conneciton string goes here"))
          {
              conn.Open();
              const string sql = "SELECT * FROM Table2";
              using (var cmd = new SqlCommand(sql, conn))
              {
                  var dt = new DataTable();
                  dt.Load(cmd.ExecuteReader());
                  return dt;
              }
          }
      }
      

      【讨论】:

      • 请多多包涵,我已经测试过了。不幸的是它不起作用,只是为了澄清(Table1 = ord.Get_Orders();//来自存储过程)和(Table2 = ord.Get_Order_Res();//来自另一个存储过程)
      • 使用存储过程获取数据不行,试试更新代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2021-11-11
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多