wpf的datagrid绑定datatable列不自动更新

yangjidi1985 2013-08-21 12:09:52
描述如下:
想利用程序实现显示NORTHWND.MDF中的所有表。listbox显示数据库中的表清单,选中listbox里面的一项以后,在datagrid中显示表的内容。
xaml如下:

<ListBox Margin="5" Name="listBox1" ItemsSource="{Binding}" SelectionChanged="listBox1_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<DataGrid Margin="5" HorizontalContentAlignment="Stretch"
Grid.Column="1" ItemsSource="{Binding Mode=OneWay}" Name="dataGrid1" Grid.RowSpan="2">

</DataGrid>
<Button Grid.Row="1" Margin="5" Content="清空" Click="Button_Click"></Button>


代码如下:

private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (listBox1.SelectedIndex > -1)
{
DeleteCurrentTable();

DataRowView dr = listBox1.SelectedItem as DataRowView;
string tableName = string.Format("[{0}]", dr["Name"].ToString()) ;
string commandString = "SELECT * FROM " +tableName;
using (connection = new SqlConnection(connectionString))
{
command = new SqlCommand(commandString, connection);
SqlDataAdapter adapter = new SqlDataAdapter();
connection.Open();
adapter.SelectCommand = command;
adapter.Fill(dataTableCurrent);
dataGrid1.DataContext = dataTableCurrent;
}
}
}

现在遇到的问题是datagrid中的列并不会随着dataTableCurrent的列进行更新。
在代码里面清空dataTableCurrent的所有列以后

dataTableCurrent.Clear();
while (dataTableCurrent.Columns.Count > 0)
dataTableCurrent.Columns.RemoveAt(0);


界面显示如下:


为什么datagrid的列不随着datatablecurrent的列进行更新呢?
请帮忙看下,谢谢!
...全文
502 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangjidi1985 2013-08-26
  • 打赏
  • 举报
回复
引用 2 楼 bushiyundeyu 的回复:
你应该设置绑定数据集合为ObservableCollection<T>这样才会自动更新前台。 参考: http://www.cnblogs.com/chengxingliang/archive/2011/07/18/2108732.html
学习了
Architecture Net 2013-08-23
  • 打赏
  • 举报
回复
你应该设置绑定数据集合为ObservableCollection<T>这样才会自动更新前台。 参考: http://www.cnblogs.com/chengxingliang/archive/2011/07/18/2108732.html
yangjidi1985 2013-08-21
  • 打赏
  • 举报
回复
刚才自己弄了一下,凑巧把设置dataGrid1.AutoGenerateColumns = false;之后删除datatable的列,再设置dataGrid1.AutoGenerateColumns = true;最后再载入数据库的表就显示正常了。 另外之前在http://stackoverflow.com/questions/320089/how-do-i-bind-a-wpf-datagrid-to-a-variable-number-of-columns 上面看到一个帖子,没有试成功,看不大懂。

private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (listBox1.SelectedIndex > -1)
            {
                dataGrid1.AutoGenerateColumns = false;  //.......

                dataTableCurrent.Clear();
                while (dataTableCurrent.Columns.Count > 0)
                    dataTableCurrent.Columns.RemoveAt(0);

                dataGrid1.AutoGenerateColumns = true;  //如果一直为True,dataTableCurrent不能正常更新列
                DataRowView dr = listBox1.SelectedItem as DataRowView;
                string tableName = string.Format("[{0}]", dr["Name"].ToString()) ;
                string commandString = "SELECT * FROM " +tableName;
                using (connection = new SqlConnection(connectionString))
                {
                    command = new SqlCommand(commandString, connection);
                    SqlDataAdapter adapter = new SqlDataAdapter();
                    connection.Open();
                    adapter.SelectCommand = command;
                    adapter.Fill(dataTableCurrent);
                }
            }
        }
不知道怎么可以直接用xaml绑定就能够把数据库的各个表能够正常显示出来的方法,希望有高手能指点下。

8,734

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧