所以我在这个类中有一个类,评论者和两个方法,SaveBtn_Click - 主要不是由我创建的,然后是PeerReview,主要由我创建。
无论如何,代码就像这样开始(在各种using语句之后):
public partial class commenter : System.Web.UI.Page
{
string employee_reviewed;
PeerReview pr = new PeerReview();
public void SaveBtn_Click(object sender, EventArgs e)
{
//all the information for the SaveBtn_Click method.
}
之后,我有PeerReview:
public void PeerReview(System.Web.UI.WebControls.ListBox listbox)
{
MySqlConnection con = new MySqlConnection("server=localhost;database=hourtracking;uid=username;password=password");
MySqlCommand cmd = new MySqlCommand("select first_name from employee where active_status=1", con);
con.Open();
MySqlDataReader r = cmd.ExecuteReader();
Console.WriteLine("Another test!");
Console.WriteLine(r);
Console.WriteLine("Hi, this is a test!");
while (r.Read())
{
listbox.Items.Add(new ListItem(Convert.ToString(r["first_name"]), Convert.ToString(r["first_name"])));
}
con.Close();
}
我将它与ASP.NET连接,我可以显示列表框,但不能显示列表框中的各个项目。我正在使用console.writeline命令测试它,看看是否输出任何内容 - 但ASP页面上没有任何内容。
我不确定我应该如何引用这些特定部分(C#的新内容,询问有关此问题的3个问题)。
ASP代码如下所示:
<asp:ListBox ID="listBox1" runat="server">
答案 0 :(得分:2)
你有一些混淆的声明。
您声明了一个名为PeerReview的方法,但您也尝试创建PeerReview实例,就像它是类型一样。我想你真的只想从按钮点击事件中调用PeerReview方法,例如
public void SaveBtn_Click(object sender, EventArgs e)
{
PeerReview();
}
然后消除“PeerReview pr = new PeerReview();”线。此外,由于它位于页面上,因此您可以通过其ID在部分类中对列表框进行隐式引用,因此您无需将其作为参数传递。并且Console.WriteLines在Web应用程序中没用 - 如果您想将它添加到输出中以进行调试,可以尝试使用Response.Write。
根据OP响应进行修改
您应该在Page_Load事件处理程序中调用PeerReview:
public void Page_Load(object sender, EventArgs e)
{
// You need to determine if you should call PeerReview every time the page
// loads, or only on the initial call of the page, thus determining whether
// you need the IsPostBack() test. My instinct is that you *do* want to constrain
// it to the first pass, but only you can make that determination for
// certain based on your requirements.
if (!Page.IsPostBack) //Do you need this check?
{
PeerReview();
}
}
答案 1 :(得分:0)
快速查看此处是您要将项目添加到listbox
而不是listBox1
变化:
listbox.Items.Add(new ListItem(Convert.ToString(r["first_name"]), Convert.ToString(r["first_name"])));
为:
listBox1.Items.Add(new ListItem(Convert.ToString(r["first_name"]), Convert.ToString(r["first_name"])));
答案 2 :(得分:0)
您尝试将项目添加到列表框,尽管您的listBox的ID为listBox1
不是循环遍历数据并添加项目,而是为什么不将数据源绑定到列表框,然后在列表框中设置DataTextField和DataValueField。
所以例如(错别字可能存在......从我写C#以来已经有一段时间了)
MySqlConnection con = new MySqlConnection("server=localhost;database=hourtracking;uid=username;password=password");
MySqlCommand cmd = new MySqlCommand("select first_name from employee where active_status=1", con);
con.Open();
MySqlDataReader r = cmd.ExecuteReader();
listBox1.DataSource = r;
listBox1.DataBind();
con.Close();
如果你无法绑定到阅读器(不记得..),那么先将结果转储到数据表中,然后绑定到listBox1
DataTable dTable = New DataTable();
dTable.Load(reader);
listBox1.DataSource = dTable;
listBox1.DataBind();
在你的asp中,设置listBox字段,如:
<asp:ListBox ID="listBox1" runat="server" DataTextField="first_name" DataValueField="first_name">