我试过学习C#,我从数据库中创建了一个小列表。但是,如果我不想使用listbox。我如何使用Panel和linkbuttons做同样的事情?
我试过像这样但是,我无法设置 panel.DataSource = cmd.ExecuteReader(); 或 listlb.DataSource = cmd.ExecuteReader(); 所以,我该怎么做?我必须把DataSource或ExecuteReader放在哪里?
Panel panel = new Panel();
List<LinkButton> listlb = new List<LinkButton>();
foreach (someting)
{
LinkButton button = new LinkButton();
button.Text = name;
button.PostBackUrl = link
panel.Controls.Add(button);
}
这是我的示例代码,(有效):
using (var con = new SqlConnection(@"Data Source=localhost;Initial Catalog=MyData;Integrated Security=SSPI;User ID=****;Password=****;"))
{
string query = "SELECT name, link FROM animals";
var cmd = new SqlCommand(query, con);
con.Open();
var list = new ListBox();
list.DataSource = cmd.ExecuteReader();
list.DataTextField = "name";
//list.DataValueField = "link";
list.DataBind();
Controls.Add(list);
}
想法是,当我点击名称时,它会打开网址。
答案 0 :(得分:1)
这可以让你添加没有ListBox的控件
using (var dReader = cmd.ExecuteReader()) {
if (dReader != null) {
while (dReader.Read()) {
LinkButton btn = new LinkButton();
//You should change the offset if you want to edit the query
//In your case 0 is name and 1 is link
btn.Text = dReader.GetString(0);
btn.PostBackUrl = dReader.GetString(1);
panel.Controls.Add(btn);
}
}
}
答案 1 :(得分:0)
是的,打算这样做,
考虑将foreach中的链接按钮添加到Panel。
但是如果我不使用新的 ListBox(); ,我将保存 cmd.ExecuteReader(); ?
var list = new ListBox(); // I replace this with what?
list.DataSource = cmd.ExecuteReader();
foreach(object item in Listbox)
{
LinkButton btn = new LinkButton();
btn.Text = item.name;
btn.PostBackUrl = item.link;
panel.Controls.Add(btn);
}
Controls.Add(panel);
这是我的问题。我不知道在哪里需要保存 cmd.ExecuteReader 。我没有很多C#代码。 Someting.DataSource = cmd.ExecuteReader();