[英]Displaying a list of hyperlink from database with c#/asp.net
我是一个asp.net / c #newbie,我正在尝试创建一个从我的数据库生成的非常简单的菜单。 到目前为止,我已设法从数据库中提取表并进入数据表,并从那里提取到数组。
我的问题是我还没弄明白如何在我的页面循环中使用数据(菜单根据用户类型而变化)。 我尝试使用<% =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();
}
谢谢。
您只需要使用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();
一个漂亮而清晰的方式,也与标题兼容,UpdatePanel是在页面内使用Literal控件并在其上呈现菜单。
在页面的某处放置一个文字:
<asp:Literal runat="server" ID="txtInfo" EnableViewState="false" />
然后使用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
无法帮助,无法从代码后面工作,因为只是直接写在页面上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.