Обновление DataSource Master-Detail XtraGrid

У меня есть этот код, который создает 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();

    }

но код не работает, можете ли вы помочь мне, пожалуйста.

3 ответа

Попробуйте код ниже. Надеюсь, что это работает

  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.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;
        }
    }
}

Проблема была в названии таблиц она менялась каждый раз

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();
    }

Спасибо за помощь

Другие вопросы по тегам