簡體   English   中英

dataGridView BindingContextChanged 事件不與 dataGridView 數據源更改同步,Winform

[英]dataGridView BindingContextChanged event not is sync with dataGridView DataSource change, Winform

我遇到了 dataGridView BindingContextChanged事件觸發的問題。 我在表單中有 2 個 datagridview,並為兩個網格實現了 BindingContextChanged 事件。

在 BindGrid 方法上,grid1 首先與數據源綁定,但 grid2 的 BindingContextChanged 事件首先觸發,然后是 grid1,然后在 grid2 與其他數據源綁定后,grid2 BindingContextChanged 事件不會觸發。 我不知道為什么會發生這種情況,我需要每個 BindingContextChanged 事件應該在各自的網格數據源分配之后觸發。 請幫我解決這個問題。

下面是示例代碼

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.dataGridView1.BindingContextChanged += new System.EventHandler(this.dataGridView1_BindingContextChanged);
        this.dataGridView2.BindingContextChanged += new System.EventHandler(this.dataGridView2_BindingContextChanged);
    }

    private void btnBind_Click(object sender, EventArgs e)
    {
        BindGrid();
    }

    protected void BindGrid()
    {
        DataTable dt1 = new DataTable();
        dt1.Columns.Add("ID", typeof(int));
        dt1.Rows.Add(1);
        dt1.Rows.Add(2);
        dt1.Rows.Add(3);
        BindingSource dataSource = new BindingSource(dt1, null);
        dataGridView1.DataSource = dataSource;

        DataTable dt = new DataTable();
        dt.Columns.Add("ID", typeof(int));
        dt.Rows.Add(1);
        dt.Rows.Add(2);
        dt.Rows.Add(3);

        BindingSource dataSource1 = new BindingSource(dt, null);
        dataGridView2.DataSource = dataSource1;
       
    }

    private void dataGridView1_BindingContextChanged(object sender, EventArgs e)
    {
        // Continue only if the data source has been set.
        if (dataGridView1.DataSource == null)
        {
            return;
        }
    }

    private void dataGridView2_BindingContextChanged(object sender, EventArgs e)
    {
        // Continue only if the data source has been set.
        if (dataGridView2.DataSource == null)
        {
            return;
        }

    }

   
}

我能夠重現這個問題。 我從BindingContextChanged事件處理程序更改為DataSourceChanged ,這解決了這個問題。 例如

this.dataGridView1.BindingContextChanged += new System.EventHandler(this.dataGridView1_BindingContextChanged);
this.dataGridView2.BindingContextChanged += new System.EventHandler(this.dataGridView2_BindingContextChanged);

至...

this.dataGridView1.DataSourceChanged += new System.EventHandler(this.dataGridView1_DataSourceChanged);
this.dataGridView2.DataSourceChanged += new System.EventHandler(this.dataGridView2_DataSourceChanged);

現在dataGridView1.DataSource在事件觸發時不是 null ,並且每個觸發都根據修改后的綁定源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM