【问题标题】:Populate Data Table in any wpf control在任何 wpf 控件中填充数据表
【发布时间】:2011-10-03 00:36:10
【问题描述】:

我很难填充此表的原因是因为该表是动态创建的:

MySql.Data.MySqlClient.MySqlDataReader selection = mySql.QuerySelect(textBox1.Text);  //textBox1.Text containts the text of the query to be executed

DataTable table = new DataTable();  // create table to hold results

// depending on the query construct the needed columns
for (int i = 0; i < selection.FieldCount; i++)
{
    table.Columns.Add("Column " + i);
}

// while there are rows insert them
while (selection.Read())
{
    object[] o = new object[selection.FieldCount];
    for(int j=0; j<selection.FieldCount; j++)
    {
        o[j] = selection[j].ToString();
    }
    table.Rows.Add(o);
}

到目前为止,我的表已经构建完成。

现在我的问题是如何显示该表格以便用户可以看到结果。

这是我尝试过的事情:

使用数据网格:

<DataGrid AutoGenerateColumns="False" Margin="73,264,17,12" Name="dataGrid1" ItemsSource="{Binding}" />

后面的代码:

dataGrid1.DataContext = table.DefaultView;

不显示结果。行被填充,第二行但没有内容......

与列表视图

<ListView Height="72" Margin="78,253,17,0" Name="listView1" VerticalAlignment="Top" ItemsSource="{Binding}" />

后面的代码:

            listView1.DataContext = table.DataSet;
            listView1.DataContext = table.DefaultView;

注意显示的行数正确,但内容错误。

带有列表框

类似的技术....

【问题讨论】:

    标签: c# wpf datatable dataset


    【解决方案1】:

    您希望网格中有列,因此您可能不希望 AutoGenerateColumns="False"

    要使用&lt;ListView&gt;,您需要自己在&lt;GridView&gt; 中创建列。

    要使用&lt;ListBox&gt;,请将DisplayTemplate 设置为包含列表框UI 的&lt;DataTemplate&gt;

    【讨论】:

    【解决方案2】:

    如果您使用ListBox,则需要为列表框设置ItemTemplateItemTemplate 告诉控件如何呈现每个数据项(表默认视图中的 DataRowView)。

    一个简单的DataTemplate 是一个文本块,其文本属性绑定到表中的列之一

    <ListBox ItemsSource="{Binding Path=MyTable.DefaultView}">
         <ListBox.ItemTemplate>
             <DataTemplate>
                 <TextBlock Text="{Binding SomeColumn}" />
             </DataTemplate>
         </ListBox.ItemTemplate>
    </ListBox>
    

    【讨论】:

    • 我需要使用任何东西。一个列表框就可以了。我真的不明白你对 ItemTemplate 的意思。回想一下,我不知道该表将包含多少列...
    • 如果表格是动态的,那么您应该使用 DataGrid 并设置 AutoGenerateColumns=True -- 然后它将为表格中的每个 DataColumn 动态创建列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    相关资源
    最近更新 更多