2012-12-22 57 views
3

我是一個asp.net/c#newbie,我試圖創建一個非常簡單的菜單,從我的數據庫生成。 到目前爲止,我已經設法從數據庫中提取表格,並將數據從表格中提取到數據表格中。顯示數據庫的超鏈接列表與c#/ asp.net

我的問題是,我還沒有想出如何在我的頁面中使用循環中的數據(菜單根據用戶類型進行更改)。 我試過使用<% =Array %>但我似乎無法在while/for循環或甚至賦值行中使用它。

也許我正在攻擊這個錯誤的方式,我想我的問題基本上是這樣的: 我如何使用我從動態頁面中的數據庫(名稱,網址)收集的數據?

這裏是我的身後當前的代碼:

public string[] keep = new string[100]; 
public void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //Response.Write("response in postback"); 
     getMenu(); 
    } 
} 

void getMenu() 
{ 
    Response.Write("response in getmenue"); 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = "server=(local);database=PhilipsMaterials;Integrated Security=SSPI;"; 
    con.Open(); 
    DataSet ds = new DataSet(); 
    DataTable dt = new DataTable(); 
    string sql = "Select * from Materials"; 
    SqlDataAdapter da = new SqlDataAdapter(sql, con); 
    da.Fill(ds); 
    dt = ds.Tables[0]; 
    DataRow[] drowpar = dt.Select(); 
    int i = 0; 
    foreach (DataRow dr in drowpar) 
    { 
     keep[i] = dr["Material Name"] as string; 
     i = i + 1; 
    } 

    con.Close(); 

} 

謝謝。

回答

3

你只需要使用像gridview或repeater數據控件。然後,您可以將數據集綁定到這些控件的數據源屬性。從我的觀點中繼​​點將會是動態菜單最佳datacontro ..

這裏是標記爲中繼

<asp:Repeater ID="Rept" runat="server"> 
    <HeaderTemplate> 
    <ul> 
    </HeaderTemplate> 
    <ItemTemplate> 
    <li><a href='<%#Eval("url") %>'><%#Eval("names") %></a></li> 
    </ItemTemplate> 
    <FooterTemplate> 
    </ul> 
    </FooterTemplate> 

,這裏是綁定數據集

Rept.DataSource = ds; 
Rept.DataBind(); 
+0

工作就像一個魅力,謝謝! – Ned

1

代碼一個很好的和明確的這也與頭部兼容,並且UpdatePanel將在頁面內使用Literal控件並在其上呈現菜單。

將在你的頁面文字的地方:

<asp:Literal runat="server" ID="txtInfo" EnableViewState="false" /> 

然後在使用StringBuilder,然後你的數據背後的代碼渲染它放在這個直譯爲:

StringBuilder sbRenderOnMe = new StringBuilder(); 

sbRenderOnMe.Append("<br> Some Text"); 

txtInfo.Text = sbRenderOnMe.ToString(); 

您的代碼將是例如:

using(SqlConnection con = new SqlConnection()) 
{ 
    con.ConnectionString = "server=(local);database=PhilipsMaterials;Integrated Security=SSPI;"; 
    con.Open(); 
    DataSet ds = new DataSet(); 
    DataTable dt = new DataTable(); 
    string sql = "Select * from Materials"; 
    SqlDataAdapter da = new SqlDataAdapter(sql, con); 
    da.Fill(ds); 
    dt = ds.Tables[0]; 
    DataRow[] drowpar = dt.Select(); 

    StringBuilder sbRenderOnMe = new StringBuilder(); 
    foreach (DataRow dr in drowpar) 
    { 
    sbRenderOnMe.AppendFormat("Some Menu Names : {0}", dr["Material Name"]); 
    } 

    con.Close(); 
} 

txtInfo.Text = sbRenderOnMe.ToString(); 

一些注意事項:請勿使用Response.Write特別來自後面的代碼,因爲您可能在頁面的第一個字節之前寫入。 Response.Write是直接寫在輸出上 - 在你的情況下,你贏得創建一些數據並將它們放置在你的頁面上特定的地方,Response.Write不能幫助,不能在後面的代碼上工作,因爲它只是直接寫在頁面上。