0

したがって、クラス、コメンター、およびそのクラス内の 2 つのメソッド、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# の初心者で、これについて 30 ほどの質問があります)。

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ここでのクイックビューは、代わりにアイテムを追加しています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 に答える
0

リストボックスの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 に答える