GridView实现双击进行编辑,更新

来源:互联网 发布:淘宝违规不知道为什么 编辑:程序博客网 时间:2024/05/17 20:35

虽然标题是原创,但是其实主要的思想呢还是接见了晓风残月的思路,今天在晓风残月的博客上看到了如何利用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>");

        }

    }

}