同桌上课用手指进去了好爽_欧美丰满熟妇xxⅹⅹ性大i_成人av天天日天天拍拍_猛男gay帅男gay男男同志_欧美va天堂在线观看_人妻无码av中文系列三里桃花_亚欧免费无码在线观看_久久久精品国产亚洲av水_日韩在线免费看污污污_2021无码专区人妻系列日韩

首頁 優(yōu)化推廣 關(guān)于DataList嵌套DataList的問題(重點(diǎn)在于處理某些特殊結(jié)構(gòu)與數(shù)據(jù)綁定)

關(guān)于DataList嵌套DataList的問題(重點(diǎn)在于處理某些特殊結(jié)構(gòu)與數(shù)據(jù)綁定)

來源: | 時間:2011/4/7 16:10:24 |

最近公司要做一個客戶展示系統(tǒng):(類似調(diào)查問卷,并生成統(tǒng)計圖)涉及到了DataList嵌套DataList的問題,現(xiàn)在把自己的心得公布希望多多交流并且也在尋找更加簡單合適的方法!


用DataList嵌套DataList的意義 無非是想構(gòu)造 類似樹型結(jié)構(gòu)的展示功能(N大主題包括N小主題,每個大主題內(nèi)嵌小主題)

比如我這次的項目是一個調(diào)查項目:要求結(jié)果是:

你喝過咖啡嗎?   
喝過
沒喝過
你喜歡喝咖啡嗎?   
喜歡
一般
不喜歡
您的月薪?   
小于1000
1000到5000
5000以上
您的學(xué)歷?   
大專以下
大專
大本
碩士以上



其中紅色內(nèi)容是題目,綠色內(nèi)容是回答內(nèi)容,由于數(shù)據(jù)庫設(shè)計時候一定會把問題和答案分開,且一個問題多個答案選擇(一對多關(guān)系),所以問題和答案
會在不同的表內(nèi)且用一條語句無法實現(xiàn)按照此結(jié)構(gòu)的順序結(jié)構(gòu)(也就是用一個DataList無法完成最終的樣式).
那么我們便會用嵌套方法,既紅色部分為父DataList綠色部分為子DataList互相不干擾.

前臺代碼:
<%@ Import Namespace="System.Data" %>
<asp:DataList ID="Parent" runat="server" Height="134px" Width="133px" OnInit="Parent_Init">
        <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text= <%# Eval("QuestionContent") %> Font-Bold="True" ForeColor="Red"></asp:Label>
            &nbsp;&nbsp;<asp:DataList ID="Child" runat="server" datasource= <%# ((DataRowView)Container.DataItem).Row.GetChildRows("Myrelations") %> ForeColor="Green">
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text= <%# DataBinder.Eval(Container.DataItem, "[\"AnswerContent\"]")%> ></asp:Label>
                </ItemTemplate>
            </asp:DataList>
        </ItemTemplate>
    </asp:DataList>

注意:代碼綠色部分分別為這個項目 問題的綁定與選擇答案的綁定.
         代碼紅色部分為子DataList的數(shù)據(jù)源綁定  "Myrelations"為問題與選擇答案表的關(guān)系名稱(關(guān)于這個關(guān)系名稱的由來下面的代碼中將介紹)


后臺代碼:

  String connStr = ConfigurationManager.ConnectionStrings["ResearchProjectConnectionString"].ConnectionString;  //讀取WEB.CONFIG連接字符串
SqlConnection conn = new SqlConnection(connStr);
        SqlDataAdapter SqlDa1 = new SqlDataAdapter("select *  from Question", conn);  //遍歷問題表
        SqlDataAdapter SqlDa2 = new SqlDataAdapter("select * from Answer", conn);//遍歷回答表
        DataSet ds = new DataSet();
        SqlDa1.Fill(ds,"Question");
        SqlDa2.Fill(ds,"Answer");
        ds.Relations.Add("Myrelations", ds.Tables["Question"].Columns["QuestionOrder"], ds.Tables["Answer"].Columns["QuestionOrder"]);  //為兩個表建立關(guān)聯(lián)
        Parent.DataSource = ds.Tables["Question"];//父DataList綁定源
      
      
        Page.DataBind();//綁定
        conn.Close();

注意:關(guān)于關(guān)聯(lián)的那行代碼的意思就如同 SQL語句里面的  INNER JOIN  查詢 就是把兩個表通過QuestionOrder  連接起來

     在Question表里的QuestionOrder 與Answer表里的QuestionOrder一定要一一對應(yīng)且是一對多關(guān)系就可以讓后者內(nèi)容自動去排列在前者的相關(guān)內(nèi)容后面就構(gòu)成了上面最終的效果.

(上帝剛才罵了我,說我沒說清楚,那好把現(xiàn)在就給你們舉例說明一下!阿門!)
Question表里的QuestionOrder   假如有四種值 

服務(wù)熱線

153 8323 9821

功能和特性

價格和優(yōu)惠

網(wǎng)站和維護(hù)

推廣和優(yōu)化

微信服務(wù)號