翱翔.Net

释放.Net的力量
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DataRelation For Access DataBase

Posted on 2004-01-17 11:31  Hover  阅读(1987)  评论(3)    收藏  举报

利用DataRelation实现表间一对多关系For Access版
这几日一直被这个DataRelation困扰着!
运行环境:Microsoft .NET Framework SDK v1.1,Windows Server 2003 中文版
----------------------------------CS start------------------------------------------
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OleDb ;

namespace DR
{
 ///
 /// WebForm1 的摘要说明。
 ///

 public class WebForm1 : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.DataGrid DataGrid1;
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("./")+"database/data.mdb"); 
   myConnection.Open();
   OleDbDataAdapter cmd=new OleDbDataAdapter ("Select * from nclass",myConnection);
   OleDbDataAdapter cmd2=new OleDbDataAdapter ("Select * from Article",myConnection);
//创建并填充DataSet
   DataSet ds=new DataSet ();
//设定表名字
   cmd.Fill(ds,"NClass");
   cmd2.Fill(ds,"article");
//在基于ClassID字段的两个表之间建立父子关系
   DataColumn Parent;
   Parent=ds.Tables["Nclass"].Columns["classid"];
   DataColumn Child;
   Child=ds.Tables["Article"].Columns["classid"];
//如果不以DataRelation.aspx命名的话下句的System.Data均可省略!
   System.Data.DataRelation OrderRelation=new System.Data.DataRelation ("OrderRelation",Parent,Child,false);
//为DataSet添加关系
   ds.Relations.Add(OrderRelation);
//把DataGrid绑定到Nclass表
   this.DataGrid1.DataSource =ds.Tables["nclass"].DefaultView;
   this.DataGrid1.DataBind ();
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //

   InitializeComponent();
   base.OnInit(e);
  }
 
  ///
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  ///

  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);
  }
  #endregion
 }
}
-----------------------------cs end--------------------------------------
-----------------------------aspx start-----------------------------------
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="DR.WebForm1" %>
<%@ Import namespace="System.Data"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>WebForm1</title>
  <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
  <meta name="CODE_LANGUAGE" Content="C#">
  <meta name="vs_defaultClientScript" content="JavaScript">
  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
 </HEAD>
 <body>
  <form id="Form1" method="post" runat="server">
   <asp:DataGrid id="DataGrid1" BorderColor="#0099FF" runat="server" ShowHeader="False" Width="470px"
    CellPadding="0" CellSpacing="0" AutoGenerateColumns="False" BorderWidth="2px">
    <Columns>
     <asp:TempLateColumn>
      <ItemTemplate>
       <table cellspacing="0" cellpadding="0" width="100%" border="0">
        <tr>
         <td bgcolor="#ff6600"><b>类名<%# DataBinder.Eval(Container.DataItem,"ClassName")%></b></td>
         <td bgcolor="#ff6600">
         </td>
        </tr>
        <tr>
         <td align="right">
          <asp:DataGrid ID =DataGrid2 Runat =server AutoGenerateColumns =false BorderColor="#33FF33" DataKeyField="ID" DataSource='<%# ((DataRowView)Container.DataItem).CreateChildView("OrderRelation") %>'>
           <columns>
            <asp:TemplateColumn HeaderText="名称">
             <HeaderStyle Width="300px"></HeaderStyle>
             <ItemTemplate>
              <%# DataBinder.Eval(Container.DataItem,"Title")%>
             </ItemTemplate>
            </asp:TemplateColumn>
           </columns>
          </asp:DataGrid>
         </td>
         <td align="right">
          <asp:DataGrid ID ="Datagrid3" Runat =server AutoGenerateColumns =false BorderColor="#33FF33" DataKeyField="ID" DataSource='<%# ((DataRowView)Container.DataItem).CreateChildView("OrderRelation") %>'>
           <columns>
            <asp:TemplateColumn HeaderText="作者">
             <HeaderStyle Width="300px"></HeaderStyle>
             <ItemTemplate>
              <%# DataBinder.Eval(Container.DataItem,"Author")%>
             </ItemTemplate>
            </asp:TemplateColumn>
           </columns>
          </asp:DataGrid>
         </td>
        </tr>
       </table>
      </ItemTemplate>
     </asp:TempLateColumn>
    </Columns>
   </asp:DataGrid>
  </form>
 </body>
</HTML>

-------------------------------------aspx end--------------------------------------------
其间有个问题上面红色那句,一开始我用
DataRelation OrderRelation=new DataRelation ("OrderRelation",Parent,Child,false);
居然报三处错误!
1: D:\DotNet\Hover\DataRelation.aspx.cs(37): 参数“1” : 无法从“Hover.DataRelation”转换为“System.Data.DataRelation”
2: D:\DotNet\Hover\DataRelation.aspx.cs(37): 与“System.Data.DataRelationCollection.Add(System.Data.DataRelation)”最匹配的重载方法具有一些无效参数
3: D:\DotNet\Hover\DataRelation.aspx.cs(36): 重载“DataRelation”方法未获取“4”参数
就在写此文时我新建一工程后已webform1.aspx为文件名居然不用加
System.Data.DataRelation, 可能是以DataRelation.aspx为文件名后,默认的类名是
public class DataRelation : System.Web.UI.Page
 {
 }
与系统的System.Data.DataRelation重名导致上面三处错误!
怪不得http://cnblogs.com/hover/articles/177.aspx
这的代码我挪过来就用不了了,我引用了using System.Data也不行!
呵是我文件名的默认类名与系统的System.Data.Relation重名!这个问题弄不明白,春节我也过不好!,这回终于解决了!:)
源代码:Http://bns.23city.com/source/dr.rar

在此感谢dudu!在他的帮助下此程序才得以调通运行!