首页 新闻 赞助 找找看

这样的方式能不能实现数据绑定呢?

0
悬赏园豆:50 [已解决问题] 解决于 2016-02-23 08:59

c#能不能直接将数据写进xsd里创建的datatabel?比如讲listviwe里的数据写进去,然后再将xsd里创建的datatabel上的数据绑定到水晶报表?感觉这是个有点难得问题,因为这个没有适配器,绑定的时候查询语句根本没法写!

起个名字真非常艰难的主页 起个名字真非常艰难 | 初学一级 | 园豆:157
提问于:2016-02-05 17:09
< >
分享
最佳答案
0

只要DataTable的结构你是知道的,不管从哪儿来的数据(SQL SERVER\XML文件\内存数据)都能放进去。

Dataset/Datatable/Datarow是和数据库无关的。

收获园豆:50
爱编程的大叔 | 高人七级 |园豆:30839 | 2016-02-06 09:28

现在已经把数据传进去了。那要怎样使用xsd文件里的datatabel?我到这一步卡主了,不知道怎么绑定水晶报表了,能不能教一下我?

起个名字真非常艰难 | 园豆:157 (初学一级) | 2016-02-16 13:53

@起个名字真非常艰难: 

水晶报表我不清楚。

不过一般只要是支持数据绑定的组件,都可以这样写

CrystralReport1.DataSource=yourDataTable

或者

CrystralReport1.printingcontroller.DataSource=yourDataset.tables("YourTable")

前面这部分你自己查一下水晶报表哪个对象用来绑定数据的,通常都会有一个DataSource属性的。

爱编程的大叔 | 园豆:30839 (高人七级) | 2016-02-16 15:46

@爱编程的大叔: 

CrystralReport1.DataSource=yourDataTable用这个方法会报错提示yourDataTable这是一个类型而已,不能绑定的,其实就有点像绑定datagridview一样,这个是怎么绑定的?

起个名字真非常艰难 | 园豆:157 (初学一级) | 2016-02-16 16:10

@起个名字真非常艰难: 谢谢你能为我解答,我的意思是这样的哦,首先我在xsd创建了一个datatabel,然后把listviwe上的值传给这个datatabel,我现在已经做到这一步了,差数据绑定这一步了,就是说用这个datatabel绑定数据到datagridview!!!我现在只差这个绑定,能不能教一下我?我需要知道datagridview的绑定,如果知道以上的绑定方法,那么水晶报表的绑定也可以自己推了

起个名字真非常艰难 | 园豆:157 (初学一级) | 2016-02-16 16:22

@起个名字真非常艰难: 你这基础太差,建议有空找本书看看。

你怎么把值传给datatable的。

上代码吧,你怎么给datatable赋值的。

爱编程的大叔 | 园豆:30839 (高人七级) | 2016-02-16 16:57

@爱编程的大叔:谢谢你,谢谢你,谢谢你, 嗯嗯嗯,我有点笨,以后会努力的。以下就是我给datatabel传值的方法:

 
            DataSet1.rukuDataTable ruku = new DataSet1.rukuDataTable();
            DataRow dr = ruku.NewRow();
            dr["riqi"]=Convert.ToDateTime(riqi);
            dr["leibie"] = leibie;
            dr["fenlei"] = fenlei;
            dr["mingcheng"]=mingcheng;
            dr["guige"]=guige;
            dr["shuliang"]=shuliang;
            dr["danwei"]=danwei;
            dr["danjia"]=Convert.ToDouble(danjia);
            dr["shuilv"]=Convert.ToDouble(shuilv);
            dr["jine"]=Convert.ToDouble(jine);
            dr["shuihoudanjia"]=Convert.ToDouble(shuihoudanjia);
            dr["shuihoujine"]=Convert.ToDouble(shuihoujine);
            dr["songhuodanwei"]=songhuodanwei;
            dr["fapiaohao"] = fapiao;
            dr["beizhu"] = beizhu;
            ruku.Rows.Add(dr);
            ruku.AcceptChanges();  

起个名字真非常艰难 | 园豆:157 (初学一级) | 2016-02-16 17:02

@起个名字真非常艰难: 

CrystralReport1.DataSource=ruku

爱编程的大叔 | 园豆:30839 (高人七级) | 2016-02-16 17:04

@爱编程的大叔: 我想问一下.DataSource是不是要引用的?具体怎么引用?它现在报错说没有找到.DataSource的定义。

起个名字真非常艰难 | 园豆:157 (初学一级) | 2016-02-16 17:11

@爱编程的大叔:以下是我已经用到的引用了

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using Microsoft.Reporting.WinForms;
using sinoma_lk;

起个名字真非常艰难 | 园豆:157 (初学一级) | 2016-02-16 17:13

@起个名字真非常艰难: 我说了我不清楚CrystralReport的Datasource这个属性在哪个组件上面,你得自己找。

我的代码只是个意思。

通常这种组件都有附带Sample的,你看看Sample吧。

爱编程的大叔 | 园豆:30839 (高人七级) | 2016-02-16 17:24

@爱编程的大叔: 谢谢你的帮助,水晶报表那一块我搞好了,现在又有新的问题出现了,强类型的datatabel能不能直接给他添加新行的数据啊??我刚才调试了一下,好像不行的,有没有方法解决一下? 

//DataSet1.rukuDataTable这一个是在xsd文件里创建的datatabel,能不能直接给他添加新行并赋值?DataSet1.rukuDataTable ruku = new DataSet1.rukuDataTable();
            DataRow dr = ruku.NewRow();
            dr["riqi"]=Convert.ToDateTime(riqi);
            dr["leibie"] = leibie;
            dr["fenlei"] = fenlei;
            dr["mingcheng"]=mingcheng;
            dr["guige"]=guige;
            dr["shuliang"]=shuliang;
            dr["danwei"]=danwei;
            dr["danjia"]=Convert.ToDouble(danjia);
            dr["shuilv"]=Convert.ToDouble(shuilv);
            dr["jine"]=Convert.ToDouble(jine);
            dr["shuihoudanjia"]=Convert.ToDouble(shuihoudanjia);
            dr["shuihoujine"]=Convert.ToDouble(shuihoujine);
            dr["songhuodanwei"]=songhuodanwei;
            dr["fapiaohao"] = fapiao;
            dr["beizhu"] = beizhu;
            ruku.Rows.Add(dr);
            ruku.AcceptChanges();  

起个名字真非常艰难 | 园豆:157 (初学一级) | 2016-02-19 10:07

@起个名字真非常艰难: Datatable不保存到数据库之前基本相当于一个DataRow列表对象,

所以肯定可以自己新增行的。

你自己Google一下就有相关的信息了。

How to: Add Rows to a DataTable

DataTable.NewRow Method ()

 

我已经好多年不用DataTable了,现在一般用Ilist<Model>或者IQueryable<Model>。

爱编程的大叔 | 园豆:30839 (高人七级) | 2016-02-19 10:18

@爱编程的大叔: 我也不想用datatabel,但是水晶报表它只认这东西。。。。心塞啊!!完全都不熟,一开始不知道怎么赋值,和怎用调用里面的数据。。。。。。现在主要是怎样用xsd文件里的datatable.......不会用啊,难道要自己写一个datatable??哎。。。好心塞

起个名字真非常艰难 | 园豆:157 (初学一级) | 2016-02-19 10:34

@起个名字真非常艰难:我给你的链接你没有看看?

自己写一个Datatable也是分分钟的事啊

DataTable myDatatabe;

DataColumn myColumn;

mycolumn.ColumnName="Field1"

....

你还是花点时间看看资料吧,要不然很难...

爱编程的大叔 | 园豆:30839 (高人七级) | 2016-02-19 10:55

@爱编程的大叔: 谢谢你,看了你给的资料,因为水晶报表一定要有字段,而字段是由xsd文件里的datatable提供的。我想到了一个方法,我首先在xsd文件里创建一个datatable,然后再写一个datateble1用dt.clone()的方法,把强类型的datatable的架构复制到datatable1,我再赋值给datatable1,那样只要他们的列值相等,我再用datatable1 绑定水晶报表,应该可以吧,因为水晶报表只认架构上的列,不认是哪个架构上的,应该可以吧?

起个名字真非常艰难 | 园豆:157 (初学一级) | 2016-02-19 11:06

 @爱编程的大叔: 

他现在是在报这样的错误,所以帮定不了

起个名字真非常艰难 | 园豆:157 (初学一级) | 2016-02-19 11:09

@爱编程的大叔: 

他现在是在报这样的错误,所以帮定不了

起个名字真非常艰难 | 园豆:157 (初学一级) | 2016-02-19 11:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册