从类中调用方法 - 不工作

时间:2012-10-26 14:03:42

标签: c# asp.net

所以我在这个类中有一个类,评论者和两个方法,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">

3 个答案:

答案 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">