Не удается получить данные представления сетки и сохранить их в базе данных - PullRequest
0 голосов
/ 05 августа 2020
<div class="container">
    <asp:GridView ID="GridView1" runat="server"  AutoGenerateColumns="False" Font-Size="Medium">

<asp:TemplateField HeaderText="Student ID">
  <ItemTemplate>
     <asp:Label ID="lblID" runat="server"   Width="80px"  Text='<%#Eval("studentID") %>'/>
 </ItemTemplate>


  <asp:TemplateField HeaderText="">
        <ItemTemplate>                                     
                  <asp:LinkButton runat="server"  OnCommand="LinkButton_Click" Text=" VoteCandidate"> </asp:LinkButton>     
         </ItemTemplate>



 </asp:GridView>

    <div>
        <asp:Label ID="Label1" runat="server" ></asp:Label>
    </div>
</div>

Вот моя форма для отображения gridview.

protected void loadCandidate()
    {
        con.Open();
        MySqlCommand cmd = new MySqlCommand("select studentID from candidate where faculty='FOCS'", con);
        MySqlDataReader dr = cmd.ExecuteReader();
        if (dr.HasRows == true)
        {
            GridView1.DataSource = dr;
            GridView1.DataBind();
        }
    }


    protected void LinkButton_Click(Object sender, EventArgs e)
    {
        String MyConnection2 = "Server=localhost;database=ovs;Uid=root;password=; Convert Zero Datetime=True";
        foreach (GridViewRow g1 in GridView1.Rows)
        {
            MySqlConnection MyConn2 = new MySqlConnection(MyConnection2);
            
            String query = "insert into voting (studentID)values ('" + g1.Cells[0].Text + "')" ;
            MySqlCommand MyCommand2 = new MySqlCommand(query, MyConn2);
         
          MySqlDataReader MyReader2;
          MyConn2.Open();
          MyReader2 = MyCommand2.ExecuteReader();
          MyConn2.Close();
        }

    }

Когда я выполняю команду sql insert, ошибки не возникает, но я ожидаю, что StudentID, отображаемый в gridview, будет сохранен в таблице для голосования, но идентификатор studentID в таблице для голосования пуст.

1 Ответ

1 голос
/ 05 августа 2020

Поскольку вы используете поле шаблона в своем GridView, вы не можете использовать ячейку напрямую, вам нужно искать метку внутри ячейки следующим образом:

foreach (GridViewRow g1 in GridView1.Rows)
{
    Label lblStudentId = (Label)g1.Cells[0].FindControl("lblID");
    string studentId = lblStudentId.Text;
    // now proceed with your inserting.
}

Но если вы используете l oop так, как вы это делаете сейчас, будет вставка для каждой строки в GridView, а не только для той, на которой вы щелкнули ... Если вы хотите получить идентификатор строки, в которой находится LinkButton, не перебирайте строки. Вместо этого используйте NamingContainer -свойство отправителя следующим образом:

LinkButton linkButton = (LinkButton)sender;
GridViewRow g1 = (GridViewRow)linkButton.NamingContainer;
Label lblStudentId = (Label)g1.Cells[0].FindControl("lblID");
string studentId = lblStudentId.Text;
// now proceed with your inserting.

Подробнее см. этот вопрос и ответ

...