0

所以我有一个类、commenter 和该类中的两个方法,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">

4

3 回答 3

2

你有一些令人困惑的声明。

您声明了一个名为 PeerReview 的方法,但您也尝试创建 PeerReview 的实例,就好像它是一个type一样。我认为您真的只想从按钮单击事件中调用 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();
    }
}
于 2012-10-26T14:09:25.030 回答
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">
于 2012-10-26T14:21:43.853 回答
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"])));
于 2012-10-26T14:07:12.033 回答