WPF将DataGrid转DATaTable出现问题?求大神帮忙

lnh08_01 2020-05-13 04:18:05
我要将DataGrid转成DataTable,网上查到很多方法都没有办法实现,请求大神帮忙!
我要把上面的行内容写到DataTable行内容中。
我的代码写法:
DataTable dt = new DataTable();
for (int i = 0; i < dgData.Columns.Count; i++)
{
dt.Columns.Add(dgData.Columns[i].Header.ToString());//列可以存储成功,没有任何问题
}
DataRow dc = dt.NewRow();
for (int j = 0; j < dgData.Items.Count; j++)
{
var a = dgData.Selecteditmes;//这一步传值是一直传的null
var b = a as DataRowView;
dc[j] =b.Row[j];
}
dt.Row.Add(dc);
也使用过DataRowView进行重新绑定,但是传过去的都是null。
也试过直接dt.Row.Add(dgData.ItemsSource),但是这个传过去的只是其头名,不是每个单元格的内容。
也试过dt = ((DataView)dgData.ItemsSource).ToTable();这个他会报:无法将类型为“System.Collections.Generic.List`1[GreateATable.TableStorage]”的对象强制转换为类型“System.Data.DataView”
请问大神有什么办法,让我把DataGrid内的数据绑定到DataTable吗?
...全文
486 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
WPF的精髓就是数据驱动UI,你居然要反过来,牛X
  • 打赏
  • 举报
回复
WPF的精髓就是数据驱动UI,你居然要反过来,牛X
Flandre 2020-05-14
  • 打赏
  • 举报
回复
前端创建DataGrid时这么写
<DataGrid ItemsSource="{Binding Table0}" AutoGenerateColumns="False">
            <DataGrid.Columns >
                <DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
                <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
                <!--......-->
            </DataGrid.Columns>
</DataGrid>
后端这么写
using System.ComponentModel;
public partial class MainWindow : Window,INotifyPropertyChanged
{
        public MainWindow()
        {
             InitializeComponent();
             this.DataContext = this;
        }
        public event PropertyChangedEventHandler PropertyChanged;

        private DataView table0;

        public DataView Table0
        {
             get { return table0; }
             set { table0 = value; PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("Table0"));}
        }
        
        private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)   //前端主窗体Loaded事件
        {         
             DataTable table = new DataTable();
             DataColumn column0 = new DataColumn("ID");
             DataColumn column1 = new DataColumn("Name");
             //......
             table.Columns.Add(column0);
             table.Columns.Add(column1);
             //......
             Table0 = table.DefaultView;          
        }
}
DataGrid绑定数据源Table0,想要UI填写的表数据,就用Table0.Table,表数据是跟着UI实时更新的
lnh08_01 2020-05-14
  • 打赏
  • 举报
回复
请求大神援助!感谢
lnh08_01 2020-05-13
  • 打赏
  • 举报
回复
引用 5 楼 Flandre 的回复:
[quote=引用 3 楼 lnh08_01 的回复:]
[quote=引用 1 楼 Flandre 的回复:]
“dgData.Selecteditmes;//这一步传值是一直传的null”
SelectedItems 是用户选中你界面上DataGrid的内容,用户没有触发选中事件,它的值当然是空的
另外你这个问题,在实际应用中反过来了吧,一般都是DataTable的内容绑定到DataGrid里面去,先有DataTable数据内容,再用DataGrid将内容展现出来,如果要读取DataGrid的内容存到DataTable里,你应该先创建各个Column加到表里,然后再创建每行数据的DataRow加到表里,举个简单伪代码
DataTable table = new DataTable();
DataColumn column0 = new DataColumn("序号");
DataColumn column1 = new DataColumn("器件名称");
table.Columns.Add(column0);
table.Columns.Add(column1);
DataRow row0 = table.NewRow();
row0["ID"]="DataGrid里第一行ID值";
row0["器件名称"]="DataGrid里第一行器件名称值";
table.Rows.Add(row0);

我现在就是无法获取DataGrid里面的内容[/quote]

这个问题还真没怎么遇到过,我本来以为有现成方法获取的,你参考下这个试试https://blog.csdn.net/ITACHI_WJ/article/details/78520663
因为平时我们实际应用时,都是先有表数据的,DataGrid只是把我们已经知道的表数据给展示出来,进行绑定后都是直接处理DataTable的,你为什么会需要从UI层抓取DataGrid的值呢?不是应该先有数据再绑定到DataGird上吗?[/quote]
因为UI前端是填写的数据,我要把他导出成表数据做存储。不知道为什么一直抓不到行数据。
Flandre 2020-05-13
  • 打赏
  • 举报
回复
引用 3 楼 lnh08_01 的回复:
[quote=引用 1 楼 Flandre 的回复:] “dgData.Selecteditmes;//这一步传值是一直传的null” SelectedItems 是用户选中你界面上DataGrid的内容,用户没有触发选中事件,它的值当然是空的 另外你这个问题,在实际应用中反过来了吧,一般都是DataTable的内容绑定到DataGrid里面去,先有DataTable数据内容,再用DataGrid将内容展现出来,如果要读取DataGrid的内容存到DataTable里,你应该先创建各个Column加到表里,然后再创建每行数据的DataRow加到表里,举个简单伪代码
DataTable table = new DataTable();
DataColumn column0 = new DataColumn("序号");
DataColumn column1 = new DataColumn("器件名称");
table.Columns.Add(column0);
table.Columns.Add(column1);
DataRow row0 = table.NewRow();
row0["ID"]="DataGrid里第一行ID值";
row0["器件名称"]="DataGrid里第一行器件名称值";
table.Rows.Add(row0);
我现在就是无法获取DataGrid里面的内容[/quote] 这个问题还真没怎么遇到过,我本来以为有现成方法获取的,你参考下这个试试https://blog.csdn.net/ITACHI_WJ/article/details/78520663 因为平时我们实际应用时,都是先有表数据的,DataGrid只是把我们已经知道的表数据给展示出来,进行绑定后都是直接处理DataTable的,你为什么会需要从UI层抓取DataGrid的值呢?不是应该先有数据再绑定到DataGird上吗?
Dear200892 2020-05-13
  • 打赏
  • 举报
回复
循环获取DataGrid中的每行数据,同时插入集合中。
lnh08_01 2020-05-13
  • 打赏
  • 举报
回复
引用 1 楼 Flandre 的回复:
“dgData.Selecteditmes;//这一步传值是一直传的null”
SelectedItems 是用户选中你界面上DataGrid的内容,用户没有触发选中事件,它的值当然是空的
另外你这个问题,在实际应用中反过来了吧,一般都是DataTable的内容绑定到DataGrid里面去,先有DataTable数据内容,再用DataGrid将内容展现出来,如果要读取DataGrid的内容存到DataTable里,你应该先创建各个Column加到表里,然后再创建每行数据的DataRow加到表里,举个简单伪代码
DataTable table = new DataTable();
DataColumn column0 = new DataColumn("序号");
DataColumn column1 = new DataColumn("器件名称");
table.Columns.Add(column0);
table.Columns.Add(column1);
DataRow row0 = table.NewRow();
row0["ID"]="DataGrid里第一行ID值";
row0["器件名称"]="DataGrid里第一行器件名称值";
table.Rows.Add(row0);

我现在就是无法获取DataGrid里面的内容
lnh08_01 2020-05-13
  • 打赏
  • 举报
回复
引用 1 楼 Flandre 的回复:
“dgData.Selecteditmes;//这一步传值是一直传的null”
SelectedItems 是用户选中你界面上DataGrid的内容,用户没有触发选中事件,它的值当然是空的
另外你这个问题,在实际应用中反过来了吧,一般都是DataTable的内容绑定到DataGrid里面去,先有DataTable数据内容,再用DataGrid将内容展现出来,如果要读取DataGrid的内容存到DataTable里,你应该先创建各个Column加到表里,然后再创建每行数据的DataRow加到表里,举个简单伪代码
DataTable table = new DataTable();
DataColumn column0 = new DataColumn("序号");
DataColumn column1 = new DataColumn("器件名称");
table.Columns.Add(column0);
table.Columns.Add(column1);
DataRow row0 = table.NewRow();
row0["ID"]="DataGrid里第一行ID值";
row0["器件名称"]="DataGrid里第一行器件名称值";
table.Rows.Add(row0);

DataGrid的值已经有了,我现在需要的是把DataGrid的内容转存一次作为表格输出保存
Flandre 2020-05-13
  • 打赏
  • 举报
回复
“dgData.Selecteditmes;//这一步传值是一直传的null” SelectedItems 是用户选中你界面上DataGrid的内容,用户没有触发选中事件,它的值当然是空的 另外你这个问题,在实际应用中反过来了吧,一般都是DataTable的内容绑定到DataGrid里面去,先有DataTable数据内容,再用DataGrid将内容展现出来,如果要读取DataGrid的内容存到DataTable里,你应该先创建各个Column加到表里,然后再创建每行数据的DataRow加到表里,举个简单伪代码
DataTable table = new DataTable();
DataColumn column0 = new DataColumn("序号");
DataColumn column1 = new DataColumn("器件名称");
table.Columns.Add(column0);
table.Columns.Add(column1);
DataRow row0 = table.NewRow();
row0["ID"]="DataGrid里第一行ID值";
row0["器件名称"]="DataGrid里第一行器件名称值";
table.Rows.Add(row0);

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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