将项添加到组合框项目源

时间:2011-12-28 11:12:40

标签: c# wpf combobox

我正在将数据表绑定到组合框,就像我在下面的代码中所示。

        objComboBox.ItemsSource = objDataTableNew.DefaultView;
        objComboBox.DisplayMemberPath = objDataTableNew.Columns[0].ToString();
        objComboBox.SelectedValuePath = objDataTableNew.Columns[1].ToString();
        objComboBox.SelectedIndex = 0;

现在我想添加组合框项目,显示文本为“select”,值为“-1”到列表顶部。 直接我无法添加,因为itemsource与数据表绑定。 我尝试在索引零处向objDataTableNew插入一行。但我有一个问题。从DB获得的第0列数据表是整数列。所以我不能在该列中插入一个字符串值“select”。

我如何实现这一目标?

6 个答案:

答案 0 :(得分:0)

使用ObservableCollection绑定objComboBox.ItemsSource,其中集合的内容将是“select”字符串+数据表项。

答案 1 :(得分:0)

在WPF中尝试CompositeCollection

  <ListBox xmlns:System="clr-namespace:System;assembly=mscorlib"
    xmlns:Collections="clr-namespace:System.Collections;assembly=mscorlib">
        <ListBox.Resources>
            <Collections:ArrayList x:Key="TestCollection">
                <System:String>1</System:String>
                <System:String>2</System:String>
                <System:String>3</System:String>
                <System:String>4</System:String>
            </Collections:ArrayList>
        </ListBox.Resources>
        <ListBox.ItemsSource>
            <CompositeCollection>
                <System:String>--Select--</System:String>
                <CollectionContainer
                    Collection="{StaticResource TestCollection}"/>
            </CompositeCollection>
        </ListBox.ItemsSource>
    </ListBox>

因此,您也可以代替StaticResource从视图模型中提供Binding

希望这有帮助。

答案 2 :(得分:0)

错误消息非常自我解释。您似乎想要在整数列[0]中插入一个字符串(&#34; select&#34;)。插入整数&#34; -1&#34;在[0](整数列)和字符串&#34;选择&#34;在[1](字符串列)中。假设[1]是一个字符串列。

答案 3 :(得分:0)

这对我有用:

DataRow row = dt.NewRow(); 
row["Category"] = "<-Please select Category->"; 
dt.Rows.InsertAt(row, 0); 
CBParent.DataSource = dt;

答案 4 :(得分:-1)

首先将数据绑定到datatable并创建新行到数据表

DataRow row = dt.NewRow(); row["Category"] = "<-Please select Category->"; dt.Rows.InsertAt(row, 0); CBParent.DataSource = dt; 

答案 5 :(得分:-1)

            List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(objDataTable.Rows.Cast<DataRow>().Select(row => new KeyValuePair<string, string>(row[DisplayMemberColumn].ToString(), row[SelectedValueColumn].ToString())));
            list.Insert(0, new KeyValuePair<string, string>("<--Select-->", "-1"));
            objComboBox.ItemsSource = list;
            objComboBox.DisplayMemberPath = "Key";
            objComboBox.SelectedValuePath = "Value";
            objComboBox.SelectedIndex = 0;