您的位置:首页 > 其它

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

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




}


}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: