【问题标题】:Data binding - prevent to select next row after deleting selected row数据绑定 - 防止在删除选定行后选择下一行
【发布时间】:2018-04-12 22:52:51
【问题描述】:

我有一个组合框使用的数据表。数据表有 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 的容器,许多控件从这个容器中获取数据源。当我刷新容器中的数据表时,控件中的数据源也会刷新,但我不想选择已删除行旁边的选项。

【问题讨论】:

  • 请阅读How to Ask 并发布您的代码。解释你的代码甚至不如展示它有效。特别是当您使用 2 种不同的编程语言标记您的问题时。
  • 发布您尝试解决问题的代码。我们很乐意为您提供帮助!
  • 您无法设置任何属性来自动执行此操作。它可能以它的方式发生,因为这意味着SelectedIndex 保持不变。为了得到你想要的行为,你需要写来做。鉴于您无论如何都必须删除代码中的项目,这应该不是问题。继续这样做,如果您在这样做时遇到特定问题,则可以发布适当的问题。

标签: c# vb.net winforms


【解决方案1】:

这将使他们选择的索引为 -1,如果这是您的要求,那么您可以检查按钮是否按下,如果 selectedindex 为 -1,然后执行其他操作而不是删除组合结果。

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

【讨论】:

  • 代码只是一个例子。我丢失了有关哪些控件使用数据表的信息。好的,也许防止这种行为的唯一方法是容器记住(使用数据表)记住连接的控件。我希望它可以更简单。
  • 从您的问题来看,您似乎希望在从连接到组合框的数据表中删除某些内容后阻止选择下一个值。我发布的代码正是这样做的。
猜你喜欢
  • 2019-09-13
  • 1970-01-01
  • 2010-09-15
  • 2011-12-21
  • 1970-01-01
  • 2018-04-01
  • 2021-07-27
  • 2012-07-10
  • 2017-12-29
相关资源
最近更新 更多