【问题标题】:Insert Combobox items to database column将组合框项目插入数据库列
【发布时间】:2013-06-19 12:54:25
【问题描述】:

是否可以将 combobox 中的值插入数据库中的特定列?

例如,如果我有 combobox 的项目:item1item2item3,我想 bind 他们给一些人columncolumn1,我要管理的是:如果选择了item1,当我点击button时,我想将该项目的值插入column1,否则如果选定的项目是 item2,那么我希望将 item2 的值插入 column1 等...

现在我知道这个问题写得不太好,但我只想知道这是否可行。

我一直在谷歌搜索这类问题,但找不到解决方案。我知道如何将 column 记录插入到 combobox 项目列表中,但不知道如何做相反的事情。

还想说我的 WPF/WCF/MVVM 应用程序中有这个问题,所以我想知道这是否可能(以及如何)以这种方式解决。

【问题讨论】:

  • 只是澄清您的问题,您在表单上有两个控件,一个是组合框,另一个是按钮。您希望将组合框中的选定值保存到数据库表的 col1 字段。我的理解正确吗???
  • 是的,没错。让我更具体一点:想象一下我有一个人名组合框:乔治、詹姆斯、迈克尔。并且有一个按钮插入,以及数据库中的一些表,其中的“名称”列是空的。如果我在组合框列表中选择“Michael”,请按下按钮插入,而不是我希望将“Michael”插入到“名称”列中。

标签: c# wpf mvvm combobox


【解决方案1】:

此解决方案基于 MVVM 模式。 将组合框控件的 Selected 项绑定到 View 模型中的某个属性。 所以你的视图应该是这样的

    <ComboBox ItemsSource="{Binding SomeItems,UpdateSourceTrigger=PropertyChanged,NotifyOnSourceUpdated=True}" SelectedValue="{Binding SelectedItemBinding,UpdateSourceTrigger=PropertyChanged,NotifyOnSourceUpdated=True}" />

    <Button Command={Binding ButtonClickCommand} ..../>

因此,一旦单击 Button,您将在 viewmodel 中获得 RelayCommand 句柄,并且您可以在那里有一个逻辑来获取所选项目并使用该值插入列中。您的视图模型应如下所示,

    public class ViewModel : //implement notify property changed and ICommand
    {
        public RelayCommand ButtonClickCommand
        {
             get new RelayCommand(EventHandlerToBeCalled);
        }


        public string SelectedItemBinding
        {
             get;
             set
             {
                  //notify property changed.
             }
        }

        //method called when button is clicked.
        private void EventHandlerToBeCalled()
        {
              //here set the SelectedItemBinding to a column.
        }
    }

【讨论】:

  • 如果您想在不使用按钮的情况下将其写入(例如数据库)怎么办? (所以更改组合框值 => 直接写入数据库)用 MVVM。
【解决方案2】:

你可以。在按钮单击事件中,您可以获取组合框的选定值并保存。

var selectedItem = ComboBoxName.SelectedItem;

但是,如果您已将组合框与对象绑定,则可以强制转换它。

var selectedItem = ComboBoxName.SelectedItem as (objecttypehere)

更新 我错过了你使用 MVVM。然后在视图中,您可以使用将组合框与所选项目绑定。

<ComboBox ItemsSource="{Binding Items}" SelectedItem="{Binding TheSelectedItem}">
     //Itemtemplates.       
</ComboBox>

在 viewModel 中,只需访问您在我的测试用例“TheSelectedItem”属性中与选定项绑定的属性。

保存!

【讨论】:

    【解决方案3】:
    1. 在组合框中,您可以存储带前缀的值(col1_12、col2_24 等)
    2. 单击按钮时,您应该解析值:将其按前缀和原始值分开
    3. 这样您就可以将值写入所需的列:

      开关(前缀){ 案例“col1”:table.column1 = 值;休息; 案例“col2”:table.column2 = 值;休息; // ETC }

    【讨论】:

      猜你喜欢
      • 2016-11-16
      • 2013-06-03
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 2021-09-03
      • 2014-08-27
      相关资源
      最近更新 更多