C#DataGrid如何绑定其中一列为下拉框?并且获取值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#DataGrid如何绑定其中一列为下拉框?并且获取值相关的知识,希望对你有一定的参考价值。

在winForm里拖了一个DataGrid,然后动态加载了多行数据,我想把"name"这一列的每一条记录都可以下拉框。
那么,问题来了:
1:如何绑定成下拉框
2:如何给下拉框填充值,值从数据库来
3:下拉框选定以后,如何获取这一列“name”所有的值,拼接成字符串都行
高分给大神啊,后续可以追加

for (int i = 0; i < 5; i++)//添加5行,第一列是下拉框

dataGridView1.Rows.Add(new object[2] "", "测试文本列"+i );
DataGridViewComboBoxCell cell = dataGridView1.Rows[i].Cells[0] as DataGridViewComboBoxCell;
cell.Items.Add("选项"+(i+1));
cell.Items.Add("选项" + ( i + 2));
cell.Items.Add("选项" + ( i + 3));

dataGridView1.Refresh();
//获取指定行的cell单元格下拉框里的所有数据
foreach (object obj in cell.Items)

string str = obj.ToString();
参考技术A 自己搜datagridviewcomboboxcolumn的用法。追问

我搜了,能搞出来,我就不在这里问了

如何将 DataGrid 中的文本框绑定到 Wpf 中的列表?

【中文标题】如何将 DataGrid 中的文本框绑定到 Wpf 中的列表?【英文标题】:How to Bind a TextBox in DataGrid to a List in Wpf? 【发布时间】:2017-08-18 02:26:08 【问题描述】:

我正在开发一个新的 Wpf 项目,并且正在努力将 DataGrid 中的文本框绑定到 Wpf 中的对象列表。 谁能帮我解决?

这是我的代码(简化版),通过绑定我的 Orders 对象来生成 Datagrid 行。 用户可以更改订单项目,它应该绑定到下划线对象。 一旦用户单击 Read orders 按钮,我将在文本块中显示更改。问题:TextBox 中的更改未更新到 Orders 对象中。

ObservableCollection<StxOrdr> Orders = new ObservableCollection<StxOrdr>();

private void Window_Initialized(object sender, EventArgs e)

    Orders.Add(new StxOrdr()  ID = 1, Desc = "Order-#1", Item1 = "11", Item2 = "12", Item3 = "13" );
    Orders.Add(new StxOrdr()  ID = 2, Desc = "Order-#2", Item1 = "21", Item2 = "22", Item3 = "23" );
    Orders.Add(new StxOrdr()  ID = 3, Desc = "Order-#3", Item1 = "31", Item2 = "32", Item3 = "33" );                        
    Dg2.ItemsSource = Orders;


private void ReadUpdatedOrders(object sender, RoutedEventArgs e)

    TxtBlk.Text = "";
    foreach (StxOrdr odr in Orders)
    
        TxtBlk.Text += string.Format("0:   1 - 2 - 3\n", odr.Desc, odr.Item1, odr.Item2, odr.Item3);
    

窗口 XML

<DataGrid x:Name="Dg2"  HorizontalAlignment="Left" Margin="21,295,0,0" VerticalAlignment="Top" Height="230" Width="451"
AutoGenerateColumns="false" ItemsSource="Binding Source=Orders" >
<DataGrid.Columns>
    <DataGridTextColumn Header="ID" Binding="Binding ID" />
    <DataGridTextColumn Header="Desc" Binding="Binding Desc"   Width="80"/>
    <DataGridTextColumn Header="Item 1" Binding="Binding Item1"  Width="60"/>
    <DataGridTextColumn Header="Item 2" Binding="Binding Item2"  Width="60"/>
    <DataGridTemplateColumn Header="Item 3" >
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBox Text="Binding Item3, Mode=OneWayToSource" Width="60" />                            
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
    
<TextBlock x:Name="TxtBlk" HorizontalAlignment="Left" Margin="489,295,0,0" TextWrapping="Wrap" Text="  Updated order details:" 
           VerticalAlignment="Top" Height="176" Width="408" Background="#FFFFFCBC"/>
<Button x:Name="Btn2_Copy" Content="Read Orders" HorizontalAlignment="Left" Margin="489,476,0,0" 
        VerticalAlignment="Top" Width="94" Click="ReadUpdatedOrders"/>

用户界面窗口的屏幕截图

【问题讨论】:

【参考方案1】:

我认为大多数事情看起来都是正确的。确保 Orders.cs 实现了 INotifyPropertyChanged 并且这行代码

<TextBox Text="Binding Item3, Mode=OneWayToSource" Width="60" />  

更新为 Mode = TwoWay 和 UpdateSourceTrigger = PropertyChanged。我会改成

<TextBox Text="Binding Item3, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged" Width="60" />  

【讨论】:

以上是关于C#DataGrid如何绑定其中一列为下拉框?并且获取值的主要内容,如果未能解决你的问题,请参考以下文章

如何将 DataGrid 中的文本框绑定到 Wpf 中的列表?

Jquery EasyUI Editable DataGrid如何绑定combogrid控件

(C#)datagridview中设置某列为下拉框

ComboBox不会在DataGridTemplateColumn中显示绑定数据

如何设置datagridview列为combobox

C#中为DataGrid添加下拉列表框(转载)