使用c#/asp.net显示数据库中的超链接列表

使用c#/asp.net显示数据库中的超链接列表,c#,asp.net,C#,Asp.net,我是一个asp.net/c新手,我正在尝试创建一个从我的数据库生成的非常简单的菜单。 到目前为止,我已经成功地将表从数据库提取到一个数据表中,然后从那里提取到一个数组中 我的问题是,我还没有弄清楚如何在页面中使用循环中的数据(菜单会根据用户类型而变化)。 我试着使用,但我似乎无法在while/for循环甚至赋值行中使用它 也许我用错误的方式来攻击它,我想我的问题基本上是这样的: 如何在动态页面中使用从数据库(名称、URL)收集的数据 以下是我当前的隐藏代码: public string[

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

我的问题是,我还没有弄清楚如何在页面中使用循环中的数据(菜单会根据用户类型而变化)。 我试着使用
,但我似乎无法在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();

}

谢谢。

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

这是中继器的加价

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

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

在页面中的某个位置放置文字:

<asp:Literal runat="server" ID="txtInfo" EnableViewState="false" />
例如,您的代码如下所示:

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();
一些注意事项:不要使用
响应。特别是从代码后面写入
,因为您可能在页面的第一个字节之前写入。
响应。Write
是对输出的直接写入-在您的情况下,您赢得了创建一些数据并将它们放在页面上特定的位置,
响应。Write
帮不上忙,无法从代码隐藏处处理,因为这只是对页面的直接写入

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