存储过程或GridView数据源

时间:2017-05-18 17:58:09

标签: c# asp.net sql-server gridview

我已经构建了一个前端来更新GridView中所选记录的单个列。我已经知道所有设置都是我希望它工作的方式,包括执行检查以确保选择了多行(通过我添加到GridView的模板字段复选框)并且已选择了一列从下拉列表中。 enter image description here

我将所有内容都包含在必须构建的代码块中,以便对所选行的列进行实际更新。这将循环遍历每一行,因此如果我选择了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();
  }
} 

1 个答案:

答案 0 :(得分:1)

这取决于。如果要通过循环一次更新所有内容,请使用存储过程。但是,使用EditIndex逐个更新,更容易使用源。但是,我建议使用后面的代码和SP来更新行,然后您可以使用相同的SP来更新单个或所有行。

this excellent tutorial。它涵盖了GridView编辑和更新的所有基础知识。

如果您在不久的将来有空闲时间,请尝试为GridView禁用ViewState。它将节省大量的转移kb和开销。但首先要完成上述工作;)