数据绑定 - 阻止在删除所选行后选择下一行

时间:2018-04-12 22:52:52

标签: c# vb.net winforms

我有一个由组合框使用的dataTable。 dataTable有3行(x,y,z)。在组合框中,我选择第二项(y)。之后,我从dataTable中删除所选行。组合框中的所选行是最后一行(z)。

我希望组合框在删除行后选择第一行(x)或不选择任何内容(如果可能)。我该怎么办?

我问这个是因为我不知道哪些控件使用数据表。 组合框只是一个例子,展示了在最坏的情况下会发生什么。

    public partial class Form1 : Form
{
    DataTable dt1 = new DataTable();
    public Form1()
    {

        InitializeComponent();

        dt1 = MakeDT();

        combo1.DataSource = dt1;
        combo1.ValueMember = "Name";
        combo1.BindingContext = new BindingContext();
        combo1.DisplayMember = "Name2";

        combo2.DataSource =dt1;
        combo2.ValueMember = "Name";
        combo2.BindingContext = new BindingContext();
        combo2.DisplayMember = "Name2";

        combo1.SelectedIndex = 1;
        combo1.SelectedIndex = 2;
    }
    private DataTable MakeDT()
    {
        DataTable dt = new DataTable();
        DataColumn col = new DataColumn("Name");
        dt.Columns.Add(col);
        col = new DataColumn("Name2");
        dt.Columns.Add(col);
        object[] p0 = { "Name0", "0" };
        object[] p1 = { "Name1", "1" };
        object[] p2 = { "Name2", "2" };
        object[] p3 = { "Name3", "3" };
        object[] p4 = { "Name4", "4" };
        dt.Rows.Add(p0);
        dt.Rows.Add(p1);
        dt.Rows.Add(p2);
        dt.Rows.Add(p3);
        dt.Rows.Add(p4);
        return dt;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        dt1.Rows.RemoveAt(1);
    }
}

我有一个带有dataTables的容器,许多控件从这个容器中获取数据源。当我刷新容器中的数据表时,控件中的数据源也会刷新,但我不想在已删除的行旁边选择。

1 个答案:

答案 0 :(得分:0)

这将使他们选择索引为-1并且如果它是你的要求,那么你可以在按下按钮时检查selectedindex是否为-1然后做其他事情而不是删除组合结果。

    private void button1_Click(object sender, EventArgs e)
    {
        dt.Rows.RemoveAt(comboBox1.SelectedIndex);
        comboBox1.Refresh();
        comboBox1.SelectedIndex = -1;
    }