如何在DataGrid绑定之前为DataSet添加新列

[复制链接]
查看11 | 回复0 | 2011-4-11 10:39:11 | 显示全部楼层 |阅读模式
<span class=\"contentad\"></span><B>如何在DataGrid绑定之前为DataSet添加新列</B>作者:孟宪会出自:【孟宪会之精彩世界】发布日期:2003年8月1日 12点12分5秒 <HR color=#f46240 SIZE=1>
在实际的应用中经常会遇到根据其它列计算某一新列的结果,实现这样的功能有两种办法:一个直接使用SQL语句;另外就是在绑定时进行动态添加。第一种方法以前已经介绍过。下面就是第二种方法的具体实现:
<B>AddDataSetColumn.aspx</B>
<XMP><%@ Page Language=\"vb\" AutoEventWireup=\"false\" Codebehind=\"AddDataSetColumn.aspx.vb\"Inherits=\"aspxWeb.AddDataSetColumn\"%><!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><HTML><HEAD>
<title>AddDataSetColumn</title>
<meta name=\"GENERATOR\" content=\"Microsoft Visual Studio .NET 7.1\">
<meta name=\"CODE_LANGUAGE\" content=\"Visual Basic .NET 7.1\">
<meta name=\"vs_defaultClientScript\" content=\"JavaScript\">
<meta name=\"vs_targetSchema\" content=\"http://schemas.microsoft.com/intellisense/ie5\"></HEAD><body MS_POSITIONING=\"GridLayout\">
</body></HTML></XMP>
<B>AddDataSetColumn.aspx.vb</B>
<XMP>Imports System.Web.UI.WebControlsPublic Class AddDataSetColumnInherits System.Web.UI.Page#Region \" Web 窗体设计器生成的代码 \"\'该调用是 Web 窗体设计器所必需的。<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()End SubProtected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid\'注意: 以下占位符声明是 Web 窗体设计器所必需的。\'不要删除或移动它。Private designerPlaceholderDeclaration As System.ObjectPrivate Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
\'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
\'不要使用代码编辑器修改它。
InitializeComponent()End Sub#End RegionPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strCnn As String = \"Data Source=.\\NetSDK; Initial Catalog=Northwind;User ID=sa;Password=;\"
Dim oCn As New System.Data.SqlClient.SqlConnection(strCnn)
Dim strSql As System.String = \"select * from [Order Details]\"
Dim ds As System.Data.DataSet = New System.Data.DataSet
oCn.Open()
Dim da As System.Data.SqlClient.SqlDataAdapter = New System.Data.SqlClient.SqlDataAdapter(strSql, oCn)
\' 可以直接使用SQL语句实现,这个方法可以直接绑定,不需要用模板即可
\' cmd.CommandText = \"select *,UnitPrice * Quantity *(1- Discount) as Total from [Order Details]\"
\' 我们使用另外一种方法,在DataGrid绑定之前为DataSet添加一个列
da.Fill(ds, \"DS\")
Dim dvwGrid As DataView = ds.Tables(0).DefaultView
DataGrid1.DataSource = dvwGrid
DataGrid1.DataBind()
oCn.Close()
oCn.Dispose()End SubPrivate Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As DataGridItemEventArgs) _
Handles DataGrid1.ItemDataBound
Dim elemType As ListItemType = e.Item.ItemType
If (elemType = ListItemType.Item Or elemType = ListItemType.AlternatingItem) Then
\'把DataItem转换回DataRowView对象
Dim myDataRowView As DataRowView = CType(e.Item.DataItem, DataRowView)
Dim myDataRow As DataRow = myDataRowView.Row
CType(e.Item.Cells(0).FindControl(\"OrderID\"), Label).Text = myDataRow(\"OrderID\")
CType(e.Item.Cells(1).FindControl(\"ProductID\"), Label).Text = myDataRow(\"ProductID\")
CType(e.Item.Cells(2).FindControl(\"UnitPrice\"), Label).Text = myDataRow(\"UnitPrice\")
CType(e.Item.Cells(3).FindControl(\"Quantity\"), Label).Text = myDataRow(\"Quantity\")
CType(e.Item.Cells(4).FindControl(\"Discount\"), Label).Text = myDataRow(\"Discount\")
Dim dblPrice As Double = Double.Parse(myDataRow(\"UnitPrice\"))
Dim intQuantity As Integer = Int32.Parse(myDataRow(\"Quantity\"))
Dim intDiscount As Double = Double.Parse(myDataRow(\"Discount\"))
Dim nTotal As String = String.Format(\"{0:C}\", dblPrice * (1 - intDiscount) * intQuantity)
CType(e.Item.Cells(5).FindControl(\"lblTotal\"), Label).Text = nTotal
End IfEnd SubEnd Class</XMP></span><br/>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行