【问题标题】:Combobox value changes event in Data GridView?Data GridView 中的组合框值更改事件?
【发布时间】:2024-01-23 14:14:01
【问题描述】:

我有一个包含 2 列的 DataGridView,第一个是组合框,第二个也是 windows 应用程序中的组合框。

如果用户更改了组合框,我需要适当地更新第三列中的第二个组合框,但我的问题是如何做到这一点? 我使用以下技术添加了两个组合框

 DataTable Pdt = new DataTable();
            Pdt = objProductCategory.SelectAll();
            BindingSource ps = new BindingSource();
            ps.DataSource = Pdt;
            DataGridViewComboBoxColumn ProductCatColumn = new DataGridViewComboBoxColumn();
            ProductCatColumn.DataSource = ps;
            ProductCatColumn.HeaderText = "Product Category";
            ProductCatColumn.Name = "ProductCatColumn";
            ProductCatColumn.ValueMember = "ProductCatId";
            ProductCatColumn.DisplayMember = "CatName";
            gvSale.Columns.Add(ProductCatColumn);

【问题讨论】:

    标签: c# datagridview desktop-application


    【解决方案1】:

    您可能希望创建一个继承 DataGridViewComboBoxCell 的类。

    然后覆盖您需要的任何事件方法,例如 OnKeyUp 以直接验证击键。

    DataGridViewComboBoxCell Class

    【讨论】:

      【解决方案2】:

      我不确定我是否正确理解了这个问题,但如果是这样,那么您可能可以解决您的问题

      <DataGridComboBoxColumn
          Header="FirstColumn"
          ItemsSource="{Binding FirstItemsSource}"
          SelectedValuePath="{Binding FirstSelectedValuePath}"
          DisplayMemberPath="{Binding FirstDisplayMemberPath}"
          SelectedValueBinding="{Binding FirstSelectedValue}"/>
      <DataGridComboBoxColumn
          Header="SecondColumn"
          ItemsSource="{Binding SecondItemsSource}"
          SelectedValuePath="{Binding SecondSelectedValuePath}"
          DisplayMemberPath="{Binding SecondDisplayMemberPath}"
          SelectedValueBinding="{Binding SecondSelectedValue}"/>
      

      在您的 DataContext(代码隐藏或 ViewModel)中,您实现相应的属性:

      public IList<YourType> FirstItemsSource
      {
          get
          {
              return this.firstItemsSource;
          }
          set
          {
              this.firstItemsSource = value;
          }
      }
      
      public YourType SecondSelectedValue
      {
          get
          {
              return this.secondSelectedValue;
          }
          set
          {
              this.secondSelectedValue = value;
      
              // here you can set the FirstItemsSource
              this.FirstItemsSource = this.RefreshFirstItemsSource();
          }
      }
      

      我希望我对您的理解正确,并且此解决方案可以进一步帮助您;-)

      【讨论】: