桂林网站建设
您的位置: 首页> asp.net

我要叫喊

学习本类知识需要注意某些知识点,它们之间有些关联

      技术文档
      本站业务
      本类热点
  1. DataList使用,网...
  2. DateTime.ToStrin...
  3. asp.net中的日历控...
  4. win2003服务器asp对...
  5. asp.net C# cookie清...
  6. ASP读写cookie的...
  7. ASP和ASP.NE...
  8. asp和asp.net共享s...
  9. between "Chinese_P...
  10. 比较详细的Data...
datalist嵌套datalist, repeater,gridview的嵌套道理也是一样的

在很多情况下,我们经常要显示几张关联表的数据.
下面的是采用表关联:

<%@ Page Language="C#" AutoEventWireup="true"   CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>DataList嵌套DataList的使用</title>
</head>
<body>
    <form id="form1" runat="server"> 
    <asp:Button ID="Button1" runat="server" Text="交 卷" OnClick="Button1_Click" />
    <!--父DataList开始-->
     <asp:DataList ID="ExamTest" runat="server">
     <ItemTemplate>       
     <%#DataBinder.Eval(Container.DataItem, "SubName")%>
     <br>
     <!--子DataList开始-->
     <asp:DataList runat="server" ID="SubInfo" DataSource='<%#((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>'>
     <ItemTemplate>
     <% #DataBinder.Eval(Container.DataItem,"[\"Sub\"]") %>
     <br>
     <asp:TextBox runat="server" ID="Answer" Text='<%#DataBinder.Eval(Container.DataItem,"[\"Answer\"]") %>'></asp:TextBox>
     <asp:Label ID="subID" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"[\"ID\"]") %>' Visible="false"></asp:Label>
     </ItemTemplate>
     </asp:DataList>
     <!--子DataList结束-->
     </ItemTemplate>
     </asp:DataList>
     <!--父DataList结束-->         
   </form>
</body>
</html>


protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.Page.IsPostBack)
        {
             GridViewBD();
         }
     }

    protected void GridViewBD()
    {
        string SqlConn = ConfigurationManager.AppSettings["SqlConn"];
         SqlConnection conn = new SqlConnection(SqlConn);
         SqlDataAdapter dataAda = new SqlDataAdapter("select * from ExamInfo", conn);
         DataSet dset = new DataSet();
         conn.Open();
        //读取ExamInfo表,填充父表
         dataAda.Fill(dset, "ExamInfo");
         SqlDataAdapter dataAda01 = new SqlDataAdapter("select * from PageInfo", conn);
        //读取PageInfo表,填充子表
         dataAda01.Fill(dset, "PageSub");
         conn.Close();
        //创建父表和子表关系
         dset.Relations.Add("myrelation", dset.Tables["ExamInfo"].Columns["ID"], dset.Tables["PageSub"].Columns["PageID"]);
        //绑定ExamInfo表到父DataList
         ExamTest.DataSource = dset.Tables["ExamInfo"];
         ExamTest.DataBind();
     }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string SqlConn = ConfigurationManager.AppSettings["SqlConn"];
         SqlConnection conn = new SqlConnection(SqlConn);
         SqlCommand cmd = new SqlCommand("Update PageInfo Set Answer=@answer where ID=@ID", conn);
         conn.Open();
        foreach (DataListItem item in ExamTest.Items)
        {
             DataList subInfo = (DataList)item.FindControl("SubInfo");        
            foreach(DataListItem childItem in subInfo.Items)
            {
                 cmd.Parameters.Clear();
                string str = ((TextBox)childItem.FindControl("Answer")).Text.ToString();
                int subID = Convert.ToInt32( ((Label)childItem.FindControl("subID")).Text.Trim() );
                 cmd.Parameters.Add("@answer",SqlDbType.VarChar,50).Value=str;
                 cmd.Parameters.Add("@ID",SqlDbType.Int).Value=subID;
                 cmd.ExecuteNonQuery();
             }                   
         }
         conn.Close();
        //刷新页面,重新绑定数据
         GridViewBD();
     }

 

下面更灵活,采用程序生成数据源:

<asp:Repeater ID="Repeater_city" runat="server">
                                  <ItemTemplate>
                                     <TR>
                                        <TD height="25"><%# Eval("城市名称")%> Hotels </TD>
                                        <TD><p align="left">
                                            <asp:DataList ID="DataList1" DataSource='<%# bind_hotelname(Eval("城市名称").ToString()) %>' RepeatColumns=2  runat="server" RepeatDirection="Horizontal" Width="100%">
                                            <ItemTemplate>
                                                <a href="../hotel/<%# Eval("[\"静态文件名\"]")  %>.htm" target="_blank"> <%# Eval("[\"酒店名称\"]")%></a>
                                            </ItemTemplate>
                                            <ItemStyle Width="50%" />                                                                                       
                                            </asp:DataList>
                                           </p></TD>
                                    </TR>
                                  </ItemTemplate>
                                  </asp:Repeater>

public DataView bind_hotelname(string cityname)
    {
        string strSQL = "select [酒店].[酒店名称],[酒店].[静态文件名] from [酒店] inner join [城市] on [酒店].[城市]=[城市].[城市名称] where [城市].[城市名称]='" + cityname + "'";
        DataTable t = Luo.Base.ExecuteSql4Ds(strSQL).Tables[0];
      
        return t.DefaultView;
    }