您好我试图在单次保存点击时保存所有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中
答案 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做了什么,所以你必须自己判断。