2012-10-26 2 views
0

Итак, у меня есть класс, комментатор и два метода внутри этого класса, SaveBtn_Click - созданный не в первую очередь не мной, а затем также PeerReview, созданный в первую очередь мной.Вызов метода из класса - не работает

Во всяком случае, код начинается, как это (после множества с помощью инструкций):

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

ли вы * ожидать * 'Console.WriteLine' писать вывод на странице? –

+2

Console.WriteLine не является ASP.Net, это для приложения Windows Console. – Liam

+0

Да, Джон. Я все еще очень новичок в ASP.NET и C# - все мои веб-работы были в PHP или Python. –

ответ

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

У вас есть некоторые запутанные заявления.

Вы объявляете метод под названием PeerReview, но у вас также есть попытка создать экземпляр PeerReview, как если бы это было типа. Я думаю, что вы на самом деле просто хочу, чтобы вызвать метод PeerReview из вашей кнопки мыши события, например

public void SaveBtn_Click(object sender, EventArgs e) 
     { 
      PeerReview(); 
     } 

А затем устранить «PeerReview пр = новый PeerReview();» линия. Кроме того, поскольку это находится на странице, у вас есть скрытая ссылка внутри частичного класса в список по его идентификатору, поэтому вам не нужно передавать его в качестве параметра. И Console.WriteLines не полезны в веб-приложении - вы можете попробовать Response.Write, если хотите добавить это для вывода в целях отладки.

редактирует основе ответа OP

Вы должны вызвать PeerReview в обработчик события Page_Load:

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(); 
    } 
} 
+0

Нет, я хочу, чтобы список PeerReview заполнялся до нажатия кнопки отправки. Они не связаны. Список для списка имен сотрудников, так что что-то может быть отправлено для этого конкретного сотрудника, а не только в общем виде. –

+0

Тогда я думаю, вам нужно вызвать PeerReview() в событии Page_Load. Вам также нужно будет определить, следует ли его вызывать только при первом вызове страницы или если он должен быть заблокирован в обратной передаче, которая возникает, когда ваш обработчик кнопки срабатывает в ответ на событие click ... –

+0

И Page_Load следует быть методом класс комментатора, правильно? –

0

Вы пытаетесь добавить элементы в ListBox, хотя ваш ListBox имеет идентификатор 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(); 

Если вы не можете связываться с читателем (не помню ..) затем сбросить свои результаты в DataTable, а затем связываются с listbox1

DataTable dTable = New DataTable(); 
    dTable.Load(reader); 
    listBox1.DataSource = dTable; 
    listBox1.DataBind(); 

в вашем жерех, установите ListBox поля, такие как:

<asp:ListBox ID="listBox1" runat="server" DataTextField="first_name" DataValueField="first_name"> 
Смежные вопросы