在datagrid中自定义一列,该列的值为前几列计算得到,如何做? 其实我想做动态生成的DataGrid,可以让用户自定义字段,字段的值由前几列的值计算得来,有什么实现方法,说个思路也行,只要能实现就给分。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你直接在SQL语句里生成不就行了吗,select a1+a2+a3 as bb from table2bb就是你要的。 用你的SQL语句构造。select sj,jh,sj-jh as sh from table 用SQL语句select a,b,a+b as c from table 我也许没有说清楚,我做的是一个二维的交叉表,我先把数据全部从数据库里面读出来,得到的是这样一些数据。时间 指标 单位 值2003-11 实际 北京 4562003-11 实际 武汉 1232003-11 计划 北京 2342003-11 计划 武汉 678然后得到这样一个表头———————————————————— | 实际 | 计划 |———————————————————— |北京 |武汉 |北京 |武汉 |————————————————————2003-11 | | | | |————————————————————然后根据用户选择的字段生成表头后,再把数据填到这样一个类里面class tablecells{ string 指标; string 单位; string 日期; int 值;}得到一个 m_tableCells[];再将数据填到上面建成的表头里面,得到交叉表———————————————————— | 实际 | 计划 |———————————————————— |北京 |武汉 |北京 |武汉 |————————————————————2003-11 | 456 | 123 | 234 | 678 |———————————————————— 现在这样做还不够,要用户能自定义字段,例如上面例子中,要得到北京和武汉的差。用户在界面上自定义一个字段,,,叫 x 它的值是北京和武汉的差,要得到这样一个表。。————————————————————————————— | 实际 | 计划 |————————————————————————————— |北京 |武汉 | X |北京 |武汉 | X |—————————————————————————————2003-11 | 456 | 123 | 333 | 234 | 678 | -444 |—————————————————————————————数据还是以上那些,我怎么通过程序控制得到 333 和 -444 这个值, 要是复杂一点的值 例如 (北京的值×北京的值)/ (武汉的值×武汉的值 + 北京的值×北京的值)^2 怎么在sql语句中做呢,。。 在dataset中构造,在datagrid上用模板列。你是能取出任何一列的值的,然后用什么逻辑算都无所谓了。 我也考虑过用模板列的。但是具体不知道怎么做。wwl1981(小刀)有没有什么具体的例子看看,如果可以我就散分。 我提个建议: 你可以创建一个新的DataTable,再写个循环,当你的用户创建一个新的列的时候,就触发这个循环,添加列, myColumn = new DataColumn(); myColumn.DataType = System.Type.GetType("System.String"); myColumn.ColumnName = "新列名"; 表名.Columns.Add(myColumn); .......... myRow["新列名"]= 新列的计算公式; 表名.Rows.Add(myRow);然后在让你的DATAGRID来绑定这个新的DataTable,刷新页面。当然了,用户创建新列的时候肯定要写该列的结构的运算公式了。你就把它转换到程序能懂的表达式。不知道行不行。你可以试试!我得一个类似的功能就是这样实现的!!祝你好运! ==================================== 流水下滩非有意, 白云出岫本无心。 ==================================== 参考一下:在dataGrid中增加一个模板列,形成一个计算列<ItemTemplate><asp:Label id="Label1" runat="server" Text='<%# (DataBinder.Eval(Container, "DataItem.title_id").ToString()+DataBinder.Eval(Container, "DataItem.title").ToString()) %>'></asp:Label></ItemTemplate> 我试试mjzcyber(流水白云) 的方法。。 或这样,写个方法在客户端转换private string a(string a,string b){ return (int(a)- int(b)).Tostring();}<ItemTemplate><asp:Label id="Label1" runat="server" Text='<%# a((DataBinder.Eval(Container, "DataItem.title_id").ToString(),DataBinder.Eval(Container, "DataItem.title").ToString())) %>'></asp:Label></ItemTemplate> datatable.columns.add("aa");<ItemTemplate> <asp:Label id="OriginalAm" Width="100px" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "TransferAmount") %>'> </asp:Label>在item_databound事件中处理Label mylab=(Label)e.item.findcontrol("OriginalAm");mylab.text=bb-cc;bb,cc可以用同样的方法取到。 Web服务器承载压力 javascript的弱智问题 根据要求截取一窜字符 cookies出现了共用问题,求助?? 一个datetime的问题?? 看见有个全国计算机信息高新技术考试,请问这个证书有用吗?用人单位认可吗? 再次请教按钮快捷键创建的问题 ~~~ 求助关于使用file field上传文件的方法,是使用ASP,VB,最好有代码示例,急~~~,在线等待 自定义的数据库可否用role验证? 如何下拉列表添加到表里的值都是第一个值 救命呀?遇到一个心痛的问题。treeview不能实例经,我已经using了呀 请问如何将一个字符串中匹配的字符找到并提取出来赋给另一个TEXTBOX?
select a1+a2+a3 as bb from table2
bb就是你要的。
select a,b,a+b as c from table
得到的是这样一些数据。
时间 指标 单位 值
2003-11 实际 北京 456
2003-11 实际 武汉 123
2003-11 计划 北京 234
2003-11 计划 武汉 678然后得到这样一个表头
————————————————————
| 实际 | 计划 |
————————————————————
|北京 |武汉 |北京 |武汉 |
————————————————————
2003-11 | | | | |
————————————————————然后根据用户选择的字段生成表头后,再把数据填到这样一个类里面class tablecells
{
string 指标;
string 单位;
string 日期;
int 值;
}得到一个 m_tableCells[];
再将数据填到上面建成的表头里面,得到交叉表————————————————————
| 实际 | 计划 |
————————————————————
|北京 |武汉 |北京 |武汉 |
————————————————————
2003-11 | 456 | 123 | 234 | 678 |
————————————————————
用户在界面上自定义一个字段,,,叫 x 它的值是北京和武汉的差,要得到这样一个表。。
—————————————————————————————
| 实际 | 计划 |
—————————————————————————————
|北京 |武汉 | X |北京 |武汉 | X |
—————————————————————————————
2003-11 | 456 | 123 | 333 | 234 | 678 | -444 |
—————————————————————————————
数据还是以上那些,我怎么通过程序控制得到 333 和 -444 这个值,
要是复杂一点的值 例如
(北京的值×北京的值)/ (武汉的值×武汉的值 + 北京的值×北京的值)^2 怎么在sql语句中做呢,。。
你可以创建一个新的DataTable,再写个循环,当你的用户创建一个新的列的时候,就触发这个循环,添加列,
myColumn = new DataColumn();
myColumn.DataType = System.Type.GetType("System.String");
myColumn.ColumnName = "新列名";
表名.Columns.Add(myColumn);
..........
myRow["新列名"]= 新列的计算公式;
表名.Rows.Add(myRow);
然后在让你的DATAGRID来绑定这个新的DataTable,刷新页面。
当然了,用户创建新列的时候肯定要写该列的结构的运算公式了。你就把它转换到程序能懂的表达式。不知道行不行。你可以试试!我得一个类似的功能就是这样实现的!!
祝你好运! ====================================
流水下滩非有意,
白云出岫本无心。
====================================
在dataGrid中增加一个模板列,形成一个计算列<ItemTemplate>
<asp:Label id="Label1" runat="server" Text='<%# (DataBinder.Eval(Container, "DataItem.title_id").ToString()+DataBinder.Eval(Container, "DataItem.title").ToString()) %>'>
</asp:Label>
</ItemTemplate>
private string a(string a,string b)
{
return (int(a)- int(b)).Tostring();
}<ItemTemplate>
<asp:Label id="Label1" runat="server" Text='<%# a((DataBinder.Eval(Container, "DataItem.title_id").ToString(),DataBinder.Eval(Container, "DataItem.title").ToString())) %>'>
</asp:Label>
</ItemTemplate>
<ItemTemplate>
<asp:Label id="OriginalAm" Width="100px" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "TransferAmount")
%>'>
</asp:Label>
在item_databound事件中处理
Label mylab=(Label)e.item.findcontrol("OriginalAm");
mylab.text=bb-cc;
bb,cc可以用同样的方法取到。