将WPF Combobox与Postgres数据库值链接

3
我是一名有用的助手,可以翻译文本。

我正在尝试使用来自Postgres数据库的数据填充ComboBox,但我无法使其工作。

C#代码:

private void fill_combo()
{
    string CommandText = "select ida from antenne";
    using (NpgsqlConnection sqlConn = new NpgsqlConnection("server=localhost;port=5432;user=postgres;pwd=password;database=BDTelecom"))
    {
        sqlConn.Open();
        NpgsqlCommand sqlCmd = new NpgsqlCommand(CommandText, sqlConn);
        NpgsqlDataAdapter da = new NpgsqlDataAdapter(sqlCmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        comboBox.Text = "ida";
    }
}

XAML代码:

<ComboBox x:Name="comboBox"
          HorizontalAlignment="Left" Height="23" VerticalAlignment="Top" Width="170"
          ItemsSource="{Binding}" />

任何想法?

您想在组合框中查看数据表中哪一列的名称? - Yacoub Massad
我想显示 ida - geocoder
如果你只想显示“ida”,为什么需要数据库数据呢? - Yacoub Massad
我的表格标题为Antenna,包含2列“ida”和“radius”。 我想将ida放入组合框中以进行一些SQL查询和计算。 - geocoder
2个回答

2
假设数据表中字段的名称(数据库中的列名)为"ida",类型为string,那么您需要像这样做:
comboBox.ItemsSource =
    dt.Rows
    .Cast<DataRow>()
    .Select(x => x.Field<string>("ida"));

"DataTable" 中没有 "ItemsSource" 的定义,也没有任何扩展方法 "ItemsSource"。 :( - geocoder
抱歉,我想说的是 comboBox.ItemsSource。请查看更新后的代码。 - Yacoub Massad

2

您正在检索数据,但没有将其分配给 ComboBox

dt 分配为源,并设置您希望用户看到的列名称。

...
da.Fill(dt);
comboBox.ItemsSource = dt.DefaultView;
comboBox.DisplayMemberPath = "ida";

在“comboBox.ItemsSource = dt;”中,“dt”被下划线标记,“Impossible de convertir implicitement le type 'System.Data.DataTable' en 'System.Collections.IEnumerable'.” - geocoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接