我已经构建了一个前端来更新GridView中所选记录的单个列。我已经知道所有设置都是我希望它工作的方式,包括执行检查以确保选择了多行(通过我添加到GridView的模板字段复选框)并且已选择了一列从下拉列表中。
我将所有内容都包含在必须构建的代码块中,以便对所选行的列进行实际更新。这将循环遍历每一行,因此如果我选择了5行,它将触发此代码5次并更新与该行关联的记录ID。
我主要与自己辩论,这是最简单的构建。我首先考虑在SQL Server上执行存储过程并向其提供记录ID,要更新的列以及要在更新中写入的值。但后来我开始思考它并意识到我有一个带有数据源的GridView,只要我调用它就已经设置为更新记录
在任何一种情况下,我都需要在更新完成后刷新GridView。
只是想知道其他人可能会认为最干净的方法是什么,以及我的选择可能是什么。我从来没有看到过实施多行列编辑,所以想象一下有人可能比我更了解如何解决这个问题。
这是我现在更新的代码块...
protected void SaveColEditBtn_Click(object sender, EventArgs e)
{
//Read the column select drop down List into Local Varriables
String SelectedColumnItem = ColumnSelectDDL.SelectedItem.ToString();
String SelectedColumnValue = ColumnSelectDDL.SelectedValue.ToString();
List<int> EditRows = new List<int>();
List<string> recordnumber = new List<string>();
foreach (GridViewRow grv in ActVulListGV.Rows)
{
if (((CheckBox) grv.FindControl("TagRowChkBx")).Checked == true)
{
//get current row rowindex if checkbox in it is checked
EditRows.Add(grv.RowIndex);
//get the record number (RecID)
recordnumber.Add(grv.Cells[2].Text.ToString());
}
}
int[] ERows = EditRows.ToArray();
if (recordnumber.Count > 1)
{
if (ColumnSelectDDL.SelectedValue.ToString() == "TicketNumber")
{
// Save Ticket number //
}
else if (ColumnSelectDDL.SelectedValue.ToString() == "TicketClosed")
{
// Save Ticket Closed Value //
}
else if (ColumnSelectDDL.SelectedValue.ToString() == "Notes")
{
// Save Notes //
}
else if(ColumnSelectDDL.SelectedValue.ToString() == "Exception_ID")
{
// Save Exception ID //
}
EditColMsgLbl.Font.Bold = true;
SelectedRowsMsgLbl.Font.Bold = true;
ColEditPnlExt.Show();
EditColLbl.Text = SelectedColumnItem;
SelectedRowsLbl.Text = "";
foreach (string record in recordnumber)
{
// Insert the call of the procedure here to update the database
}
}
else
{
UserMessageLbl.Text = " *** Choose 2 or more rows to use column edit feature! ***";
mpePopUp.Show();
}
}
答案 0 :(得分:1)
这取决于。如果要通过循环一次更新所有内容,请使用存储过程。但是,使用EditIndex逐个更新,更容易使用源。但是,我建议使用后面的代码和SP来更新行,然后您可以使用相同的SP来更新单个或所有行。
见this excellent tutorial。它涵盖了GridView编辑和更新的所有基础知识。
如果您在不久的将来有空闲时间,请尝试为GridView禁用ViewState。它将节省大量的转移kb和开销。但首先要完成上述工作;)