【问题标题】:How to achieve bulk save in Gridview using ASP.NET with C#如何使用 ASP.NET 和 C# 在 Gridview 中实现批量保存
【发布时间】:2018-05-11 18:16:24
【问题描述】:

我有一个 Gridview,其中填充了多行,如下所示,允许用户在批量保存已编辑的列后编辑已查看行的备用名称。

我尝试使用编辑模板来实现这一点,但我无法实现这一点,因为当用户尝试立即编辑下一行时,之前的“编辑”列内容被删除回原来的内容。

如何使用 gridview 实现这一点

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

    在 GridView 的编辑操作中,您的更改仅发生在您的浏览器(客户端)上,直到您保存当前行的更改。您需要保存该行并刷新 GridView 以开始编辑下一行。

    典型的实现是在编辑模板上放置两个按钮——取消和保存按钮来提交编辑行的更改。单击保存按钮时,将在服务器端代码上获取您的回发事件(事件参数 e 包含正在编辑的行和更新的行数据)。您将数据保存到数据库并刷新 GridView。那时,您应该能够看到带有更新内容的 GridView。您已准备好单击下一行的“编辑”按钮。

    【讨论】:

      【解决方案2】:

      使用这个和编辑根据你这对我来说非常有用。

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head runat="server">
          <title></title>
           <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script>
          <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js" type="text/javascript"></script>
          <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="Stylesheet" type="text/css" />
          <script type="text/javascript">
              $(function () {
      
                  $("[id$=txtRecievedDate]").datepicker({
                      showOn: 'button',
                      buttonImageOnly: true,
                      dateFormat: "yy-mm-dd",
                      buttonImage: 'http://jqueryui.com/demos/datepicker/images/calendar.gif'
      
                  });
              });
           </script>
          <style type = "text/css">
          input[type=text], select{background-color:#FFFFD2; border:1px solid #ccc}
          </style>
      </head>
      <body style = "font-family:Arial;font-size:10pt">
          <form id="form1" runat="server">
      <asp:GridView ID="gvCustomers" runat="server" AutoGenerateColumns="false"  
              DataKeyNames = "id" onrowdatabound="gvCustomers_RowDataBound">
          <Columns>
              <asp:TemplateField>
                  <HeaderTemplate>
                  <asp:Label ID="Label1" runat="server" Text="SelectEdit"></asp:Label>
                      <asp:CheckBox ID = "chkAll" runat="server" AutoPostBack="true" OnCheckedChanged="OnCheckedChanged" />
                  </HeaderTemplate>
                  <ItemTemplate>
                      <asp:CheckBox runat="server" AutoPostBack="true" OnCheckedChanged="OnCheckedChanged" />
                  </ItemTemplate>
              </asp:TemplateField>
              <asp:TemplateField HeaderText="ID" ItemStyle-Width = "150">
                  <ItemTemplate>
                      <asp:Label ID="lblId" runat="server" Text='<%# Eval("id") %>'></asp:Label>
                      <asp:TextBox ID="txtID" runat="server" Text='<%# Eval("id") %>' ReadOnly="true" Visible="false"></asp:TextBox>
                  </ItemTemplate>
              </asp:TemplateField>
              <asp:TemplateField HeaderText="Cartridge Set No" ItemStyle-Width = "150">
                  <ItemTemplate>
                      <asp:Label ID="lblCartridgeSetNo" runat="server" Text='<%# Eval("CartridgeSetNo") %>'></asp:Label>
                      <asp:TextBox ID="txtCartridgeSetNo" runat="server" Text='<%# Eval("CartridgeSetNo") %>' ReadOnly="true" Visible="false"></asp:TextBox>
                  </ItemTemplate>
              </asp:TemplateField>
              <asp:TemplateField HeaderText="Status" ItemStyle-Width = "150">
                  <ItemTemplate>
                      <asp:Label ID = "lblcurrentstatus" runat="server" Text='<%# Eval("currentstatus") %>'></asp:Label>
                      <asp:Label ID = "lblstatus" runat="server" Text='<%# Eval("status") %>' Visible = "false"></asp:Label>
                      <asp:DropDownList ID="ddlstatus" runat="server" Visible = "false">
      
                      </asp:DropDownList>
                  </ItemTemplate>
              </asp:TemplateField>
                      <asp:TemplateField HeaderText="date Recieved" ItemStyle-Width = "150">
                  <ItemTemplate>
                      <asp:Label ID="Label2" runat="server" Text='<%# Eval("dateRecieved") %>'></asp:Label>
                      <asp:TextBox ID="txtRecievedDate" runat="server" Text='<%# Eval("dateRecieved") %>' Visible="false"></asp:TextBox>
                  </ItemTemplate>
              </asp:TemplateField>
              <asp:TemplateField HeaderText="Comments" ItemStyle-Width = "150">
                  <ItemTemplate>
                      <asp:Label ID="lblComments" runat="server" Text='<%# Eval("comments") %>'></asp:Label>
                      <asp:TextBox ID="txtComments" runat="server" Text='<%# Eval("comments") %>'  Visible="false"></asp:TextBox>
      
                  </ItemTemplate>
              </asp:TemplateField>
          </Columns>
      </asp:GridView>
      <br />
      <asp:Button ID="btnUpdate" runat="server" Text="Update" OnClick = "Update" Visible = "false"/>
          </form>
      </body>
      </html>
      

      CS 文件

       using System;
      using System.Web.UI.WebControls;
      using System.Data;
      using System.Linq;
      using System.Configuration;
      using System.Data.SqlClient;
      
      public partial class _Default : System.Web.UI.Page
      {
          protected void Page_Load(object sender, EventArgs e)
          {
              if (!IsPostBack)
              {
                  this.BindGrid();
              }
          }
          private void BindGrid()
          {
              SqlCommand cmd = new SqlCommand("SELECT   [Id],[CartridgeSetNo],[status] ,[dateRecieved],[Comments] ,case when status = 1 then 'Received but not usable' when status = 0 then 'Received and Usable' else 'Not Received' end as currentstatus FROM DrugAllocate ");
              gvCustomers.DataSource = this.ExecuteQuery(cmd, "SELECT");
              gvCustomers.DataBind();
          }
          private DataTable ExecuteQuery(SqlCommand cmd, string action)
          {
              string conString = ConfigurationManager.ConnectionStrings["constring"].ConnectionString;
              using (SqlConnection con = new SqlConnection(conString))
              {
                  cmd.Connection = con;
                  switch (action)
                  {
                      case "SELECT":
                          using (SqlDataAdapter sda = new SqlDataAdapter())
                          {
                              sda.SelectCommand = cmd;
                              using (DataTable dt = new DataTable())
                              {
                                  sda.Fill(dt);
                                  return dt;
                              }
                          }
                      case "UPDATE":
                          con.Open();
                          cmd.ExecuteNonQuery();
                          con.Close();
                          break;
                  }
                  return null;
              }
          }
      
          protected void Update(object sender, EventArgs e)
          {
              foreach (GridViewRow row in gvCustomers.Rows)
              {
                  if (row.RowType == DataControlRowType.DataRow)
                  {
                      bool isChecked = row.Cells[0].Controls.OfType<CheckBox>().FirstOrDefault().Checked;
                      if (isChecked)
                      {
                          SqlCommand cmd = new SqlCommand("UPDATE DrugReceipt SET Comments=@Comments,  dateRecieved=@dateRecieved , status = @status where Id = @Id");
                          cmd.Parameters.AddWithValue("@Comments", row.Cells[5].Controls.OfType<TextBox>().FirstOrDefault().Text);
      
                          string status = row.Cells[3].Controls.OfType<DropDownList>().FirstOrDefault().SelectedItem.Value;
                          if (status == "Received and Usable")
                          {
                              status="0";
                          }
                          if (status == "Received but not usable")
                          {
                             string comments=row.Cells[5].Controls.OfType<TextBox>().FirstOrDefault().Text;
                              status = "1";
                              if (comments == "")
                              {
                                  ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('comment is mendatry');", true);
                                  break;
                              }
                          }
                          if (status == "Not Received")
                          {
                              status = "2";
                          }
                          cmd.Parameters.AddWithValue("@status", status);
                          cmd.Parameters.AddWithValue("@dateRecieved", row.Cells[4].Controls.OfType<TextBox>().FirstOrDefault().Text);
                          cmd.Parameters.AddWithValue("@Id", gvCustomers.DataKeys[row.RowIndex].Value);
                          this.ExecuteQuery(cmd, "UPDATE");
                      }
                  }
              }
              btnUpdate.Visible = false;
              this.BindGrid();
          }
          public DataSet GetYesNoValue(string ColumnName)
          {
              DataTable dtVal = new DataTable();
              DataColumn column;
      
      
              column = new DataColumn();
              column.DataType = System.Type.GetType("System.String");
              column.ColumnName = ColumnName;
              dtVal.Columns.Add(column);
      
              DataSet dsVal = new DataSet();
      
              dtVal.Rows.Add("Received and Usable");
              dtVal.Rows.Add("Received but not usable");
              dtVal.Rows.Add("Not Received");
      
              dsVal.Tables.Add(dtVal);
      
              return dsVal;
          }
          protected void OnCheckedChanged(object sender, EventArgs e)
          {
              bool isUpdateVisible = false;
              CheckBox chk = (sender as CheckBox);
              if (chk.ID == "chkAll")
              {
                  foreach (GridViewRow row in gvCustomers.Rows)
                  {
                      if (row.RowType == DataControlRowType.DataRow)
                      {
                          row.Cells[0].Controls.OfType<CheckBox>().FirstOrDefault().Checked = chk.Checked;
                      }
                  }
              }
              CheckBox chkAll = (gvCustomers.HeaderRow.FindControl("chkAll") as CheckBox);
              chkAll.Checked = true;
              foreach (GridViewRow row in gvCustomers.Rows)
              {
                  if (row.RowType == DataControlRowType.DataRow)
                  {
      
      
                      bool isChecked = row.Cells[0].Controls.OfType<CheckBox>().FirstOrDefault().Checked;
                      for (int i = 1; i < row.Cells.Count; i++)
                      {
      
      
                          row.Cells[i].Controls.OfType<Label>().FirstOrDefault().Visible = !isChecked;
                          if (row.Cells[i].Controls.OfType<TextBox>().ToList().Count > 0)
                          {
                              row.Cells[i].Controls.OfType<TextBox>().FirstOrDefault().Visible = isChecked;
                          }
                          if (row.Cells[i].Controls.OfType<DropDownList>().ToList().Count > 0)
                          {
                              row.Cells[i].Controls.OfType<DropDownList>().FirstOrDefault().Visible = isChecked;
                          }
                          if (isChecked && !isUpdateVisible)
                          {
                              isUpdateVisible = true;
                          }
                          if (!isChecked )
                          {
                              chkAll.Checked = false;
                          }
      
                      }
                  }
              }
              btnUpdate.Visible = isUpdateVisible;
          }
          protected void gvCustomers_RowDataBound(object sender, GridViewRowEventArgs e)
          {
              if (e.Row.RowType == DataControlRowType.DataRow)
              {
                  SqlCommand cmd = new SqlCommand("SELECT status,  case when status = 1 then 'Received but not usable' when status = 0 then 'Received and Usable' else 'Not Received' end as statuscurrent FROM DrugAllocate");
                  DropDownList ddlstatus = (e.Row.FindControl("ddlstatus") as DropDownList);
                  ddlstatus.DataSource = this.ExecuteQuery(cmd, "SELECT");
                  string country = (e.Row.FindControl("lblstatus") as Label).Text;
                  DataSet ds = new DataSet();
                  ds = GetYesNoValue("suppStatus");
                  DataTable dt = new DataTable();
                  dt = ds.Tables[0];
                  ddlstatus.DataSource = dt;
                  ddlstatus.DataTextField = "suppStatus";
                  ddlstatus.DataValueField = "suppStatus";
                  ddlstatus.DataBind();
                  try
                  {
                      ddlstatus.Items.FindByValue(country).Selected = true;
                  }
                  catch { }
      
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-10-18
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 1970-01-01
        相关资源
        最近更新 更多