zoukankan      html  css  js  c++  java
  • GridView如何实现双击行进行编辑,更新

    虽然标题是原创,但是其实主要的思想呢还是接见了晓风残月的思路,今天在晓风残月的博客上看到了如何利用GridView来实现双击进行编辑。我决定动手实现一下,由于还没有实现双击进行更改操作,所以顺便就把这个功能加了上去,希望对大家能有帮助,同时也谢谢晓风残月。

    效果图如下:

     

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White"
                BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" OnRowEditing="GridView1_RowEditing" OnRowDataBound="GridView1_RowDataBound" OnRowUpdating="GridView1_RowUpdating" OnRowCommand="GridView1_RowCommand">
                <FooterStyle BackColor="White" ForeColor="#000066" />
                <Columns>
                    <asp:ButtonField Text="SingleClick" CommandName="SingleClick" Visible="false" ButtonType="Link"/>
                    <asp:TemplateField HeaderText="ID">
                        <ItemTemplate>
                            <%...# Eval("customerid")%>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="ID" runat ="server" Text='<%# Bind("customerid")%>'></asp:TextBox>
                        </EditItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="CompanyName">
                        <ItemTemplate>
                            <%...# Eval("CompanyName")%>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="CName" runat ="server" Text='<%# Bind("CompanyName")%>'></asp:TextBox>
                        </EditItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ContactName">
                        <ItemTemplate>
                            <%...# Eval("ContactName")%>
                        </ItemTemplate>
                        <EditItemTemplate>
                             <asp:TextBox ID="Name" runat ="server" Text='<%# Bind("ContactName")%>'></asp:TextBox>
                        </EditItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Address">
                        <ItemTemplate>
                            <%...# Eval("Address")%>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="Address" runat ="server" Text='<%# Bind("Address")%>'></asp:TextBox>
                        </EditItemTemplate>
                    </asp:TemplateField>
                </Columns>
                <RowStyle ForeColor="#000066" />
                <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
                <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
            </asp:GridView>
        
        </div>
        </form>
    

      

    string ConStr = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
        protected void Page_Load(object sender, EventArgs e)
        ...{
            if (!IsPostBack)
            ...{
                BindData();
            }
        }
    
        private void BindData()
        ...{
            SqlConnection MyCon = new SqlConnection(ConStr);
            string QueryStr = "SELECT customerid,CompanyName,ContactName,Address FROM customers";
            SqlDataAdapter Da = new SqlDataAdapter(QueryStr, MyCon);
            DataSet Ds = new DataSet();
            Da.Fill(Ds, "Customers");
            GridView1.DataSource = Ds.Tables[0];
            GridView1.DataKeyNames = new string[] ...{ "customerid" };
            GridView1.DataBind();
        }
        protected override void Render(HtmlTextWriter writer)
        ...{
            foreach (GridViewRow Row in GridView1.Rows)
            ...{
                if (Row.RowType == DataControlRowType.DataRow)
                ...{
                    //双击进入编辑模式
                    Row.Attributes["ondblclick"] = ClientScript.GetPostBackEventReference(GridView1, "Edit$" + Row.RowIndex.ToString(), true);
                    Row.Attributes["style"] = "cursor:pointer";
                    Row.Attributes["title"] = "双击进入编辑";
                    if (Row.RowState == DataControlRowState.Edit)
                    ...{
                        Row.Attributes.Remove("ondblclick");
                        Row.Attributes.Remove("style");
                        Row.Attributes["title"] = "编辑行";
                        for (Int32 i = 1; i < GridView1.Columns.Count; i++)
                        ...{
                            ((TextBox)Row.Cells[i].Controls[1]).Attributes.Add("onmouseover", "this.select()");
                        }
                        //双击更新
                        Row.Attributes["ondblclick"] = ClientScript.GetPostBackEventReference(GridView1, "Update$" + Row.RowIndex.ToString(), true);
                    }
                    //
                    for (int i = 1; i < Row.Cells.Count; i++)
                    ...{
                        Page.ClientScript.RegisterForEventValidation(Row.UniqueID + "$ctl00", i.ToString());
                    }
                }
            }
            base.Render(writer);
        }
    
        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        ...{
            GridView1.EditIndex = e.NewEditIndex;
            BindData();
        }
    
        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        ...{
            string ID = GridView1.DataKeys[e.RowIndex].Value.ToString();
            //防止非法的输入,预防脚本攻击
            string CustomerId = Server.HtmlDecode(((TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[1]).Text.ToString());
            string CompanyName = Server.HtmlDecode(((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[1]).Text.ToString());
            string ContactName = Server.HtmlDecode(((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[1]).Text.ToString());
            string Address = Server.HtmlDecode(((TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[1]).Text.ToString());
            SqlConnection Con = new SqlConnection(ConStr);
            string UpdateStr = "UPDATE customers SET companyname=@CompanyName,contactname=@ContactName,address=@Address  WHERE customerid=@ID";
            //插入数据的时候用参数来可以预防SQL注入攻击,提高系统的安全性
            SqlCommand UpdateCmd = new SqlCommand(UpdateStr,Con);
            SqlParameter ParmID = new SqlParameter("@ID", SqlDbType.NVarChar,20);
            ParmID.Value = ID;
            SqlParameter ParmCName = new SqlParameter("@CompanyName", SqlDbType.NVarChar, 20);
            ParmCName.Value = CompanyName;
            SqlParameter ParmName = new SqlParameter("@ContactName",SqlDbType.NVarChar,20);
            ParmName.Value = ContactName;
            SqlParameter ParmAddr = new SqlParameter("@Address",SqlDbType.NVarChar,20);
            ParmAddr.Value = Address;
            try
            ...{
                UpdateCmd.Parameters.Add(ParmCName);
                UpdateCmd.Parameters.Add(ParmName);
                UpdateCmd.Parameters.Add(ParmAddr);
                UpdateCmd.Parameters.Add(ParmID);
                Con.Open();
                UpdateCmd.ExecuteNonQuery();
                Con.Close();
            }
            catch
            ...{
                ShowMessage("输入格式不正确,请检查");
            }
            finally
            ...{
                Con.Close();
                GridView1.EditIndex = -1;
                BindData();
            }
        }
        private void ShowMessage(string Message)
        ...{
            Literal TxtMsg = new Literal();
            TxtMsg.Text = "<script>alert('" + Message + "')</script>";
            Page.Controls.Add(TxtMsg);
        }
    
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        ...{
        }
        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        ...{
            GridView ControlGridView = (GridView)sender;
            if (e.CommandName == "SingleClick")
            ...{
                int RowIndex = int.Parse(e.CommandArgument.ToString());
                int ColIndex = int.Parse(Request.Form["__EVENTARGUMENT"]);
                Response.Write("<script>alert('你点击了第"+(RowIndex+1)+"行的第"+(ColIndex)+"列');</script>");
            }
        }
    }
    

      http://www.hello-code.com/blog/asp.net/201311/2223.html

  • 相关阅读:
    云原生体系下 Serverless 弹性探索与实践
    PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力
    manjaro kde系统格式化U盘
    从B站看到的资源网站(确实是很不错,推荐!)
    ERROR 2002 (HY000): Can't connect to local server through socket '/run/mysql 或 manjaro 安装 mariadb
    manjaro kde 我安装后使用到的命令
    思考了许久,博客在未来将会进行的改变(2021-10-03)
    linux 下配置 python源
    ModuleNotFoundError: No module named 'distutils.util'
    mysqlclient 安装失败
  • 原文地址:https://www.cnblogs.com/shangshen/p/3613973.html
Copyright © 2011-2022 走看看