3

我是一个 asp.net / c# 新手,我正在尝试创建一个从我的数据库生成的非常简单的菜单。到目前为止,我已经设法将表从数据库中提取到数据表中,然后从那里提取到数组中。

我的问题是我还没有弄清楚如何在我的页面中循环使用数据(菜单根据用户类型而变化)。我尝试使用<% =Array %>,但我似乎无法在 while/for 循环甚至赋值行中使用它。

也许我以错误的方式攻击这个,我想我的问题基本上是这样的:如何在我的动态页面中使用从数据库(名称,url)收集的数据?

这是我当前的代码:

    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();

}

谢谢你。

4

2 回答 2

5

您只需要使用像 gridview 或 repeater 这样的数据控件。然后您可以将数据集绑定到这些控件的数据源属性。从我的角度来看,中继器将是动态菜单的最佳数据控制。

这是中继器的标记

  <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();
于 2012-12-22T19:30:50.547 回答
1

一种很好且清晰的方法,它也与 header 兼容,UpdatePanel 是在页面内使用 Literal 控件并在其上呈现您的菜单。

在页面中的某处放置文字:

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

然后使用 a 在数据后面的代码上呈现StringBuilder,然后将其放置在此 Literal 上,如下所示:

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无法帮助,无法从后面的代码中处理,因为只是直接在页面上写入。

于 2012-12-22T19:31:37.193 回答