如何在ASP中单击保存网格视图的所有行值

时间:2013-02-14 04:54:55

标签: asp.net gridview datagridview

您好我试图在单次保存点击时保存所有gridview值。

这是我试过的代码。

protected void imgbtnSave_Click(object sender, ImageClickEventArgs e)
{
     // DAL and Other Code here

 foreach (GridViewRow row in gvServicePort.Rows)
    {
      Label _lblOneID = gvServicePort.Rows[row.RowIndex].FindControl("lblOneID") as Label;
        objserRtnDtls.TerminalID = Convert.ToInt16(_lblOneID .Text);

     RadioButton _lblTwo = gvServicePort.Rows[row.RowIndex].FindControl("rdDirectPOL") as RadioButton;   

         if (_lblIsPOL.Checked == true)
            objserRtnDtls.IsPOL = true;
        else
            objserRtnDtls.IsPOL = false;  
         int i = dalSPM.ServicePort_Update(objserRtnDtls, objSerRtn);
}

但是这里前两次迭代我得到的返回值为1后面的0并且它没有保存在DB中

1 个答案:

答案 0 :(得分:0)

一个问题可能是_lblTwo从未用于填充objserRtnDtls。我假设它可能是_lblIsPOL。我根据这个假设调整了下面的代码。

我还根据上面的评论包含了对DataRow的检查(优秀点mshsayem)。

protected void imgbtnSave_Click(object sender, ImageClickEventArgs e)
{
    // DAL and Other Code here

    foreach (GridViewRow row in gvServicePort.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            // wire up the controls in this row
            Label _lblOneID = (Label)row.FindControl("lblOneID");
            RadioButton _rdIsPOL = (RadioButton)row.FindControl("rdDirectPOL"); // renamed _lblTwo to _rdIsPOL

            // load the control data into your object
            objserRtnDtls.TerminalID = Convert.ToInt16(_lblOneID.Text);
            objserRtnDtls.IsPOL = _rdIsPOL.Checked; // renamed _lblIsPOL to _rdIsPOL to match the RadioButton above

            // attempt to update the database
            int i = dalSPM.ServicePort_Update(objserRtnDtls, objSerRtn);
        }
    }
}

另一个问题是您可能需要考虑在每个foreach迭代结束时重置objserRtnDtls,这样您就不会意外地从对象的最后一行留下旧数据。如果您有重复数据并尝试插入,如果TerminalID在数据库中应该是唯一的,则可能会失败。我不知道objSerRtn做了什么,所以你必须自己判断。