天天看點

GridView編輯删除操作

  第一種:使用DataSource資料源中自帶的編輯删除方法,這樣的不經常使用,在這裡就不加說明了。

  另外一種:使用GridView的三種事件:GridView1_RowEditing(編輯)、GridView1_RowUpdating(更新)、GridView1_RowCancelingEdit(取消編輯)。GridView1屬性中将DataKeyNames的值設定為主鍵名,否則找不到索引,這個非常重要哦。

該方法有2種操作,一種是不正确綁定列轉換為模闆列,第二種是轉換為模闆列。

這裡先說不轉換為模闆列的情況;

首先;先對GridView進行資料綁定,無論用代碼綁定還是DataSource綁定都能夠。綁定好後,對GridView加入�綁定列

GridView編輯删除操作

和編輯列

GridView編輯删除操作

(注意這裡,加入�好後不做不論什麼修改,千萬不要将它們轉換為模闆列),加入�好後,将所要綁定的資料庫表字段填入

GridView編輯删除操作

屬性中。

然後,分别激活上述提到的三種事件,然後加入�代碼:

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

{ //運作删除

string str = "delete from tb_hby where id='"+GridView1.DataKeys[e.RowIndex].Value.ToString()+"'";

    db.Delete(str); //db是操作類的執行個體,Delete是删除資料的方法

this.GridView1.DataBind();

}

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

{//運作更新

    string cell1 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim();//第一列注意這樣的寫法非常重要

     string cell2 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim();//第二列注意這樣的寫法非常重要

     string str = "update tb_hby set hby_title='" + cell1 + "',hby_Datetime='" + cell2 + "' where id='" + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";

        db.Update(str);//db是操作類的執行個體,Update是更新資料的方法

        GridView1.EditIndex = -1;

        GView();

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)

 {//激活編輯button的事件

        this.GridView1.EditIndex = e.NewEditIndex;

 }

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

    {//取消編輯狀态的事件

說明:此方法中,如果要求某個綁定列不做編輯,則在它的前台代碼中添�ReadOnly=”true”就可以。

此方法有一些缺點,比方對日期列進行格式化時,顯示的時候是格式化後的日期,可是在編輯狀态下仍然顯示出日期的原貌,還有,某一列的字元太長時,不好對它進行字元截取。

在點選删除button的時候,假設須要一個彈出删除提示,則要将删除列轉化為模闆列,其代碼例如以下:

<ItemTemplate>

  <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete" OnClientClick="return confirm('确定要删除嗎?')"                     Text="删除"></asp:LinkButton>

</ItemTemplate>

也能夠這樣寫:

在RowDataBind事件中:

if (e.Row.RowType == DataControlRowType.DataRow)

        {

            LinkButton lnkdelete = (LinkButton)e.Row.FindControl("lnkdelete");

            lnkdelete.Attributes.Add("onclick","return confirm('您确定要删除嗎?')");

        }

假設不轉化為模闆列,這這樣寫:

        {

            if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)

            {

                //((LinkButton)e.Row.Cells[7].Controls[0]).Attributes.Add("onclick", "javascript:return confirm('你确認要删除:\"" + e.Row.Cells[0].Text + "\"嗎?')");

                ((LinkButton)e.Row.Cells[7].Controls[0]).Attributes.Add("onclick", "javascript:return confirm('你确認要删除嗎?')");

            }

完整代碼例如以下:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id" OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowUpdating="GridView1_RowUpdating">

            <Columns>

                <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True"  SortExpression="id" />

                <asp:BoundField DataField="hby_Title" HeaderText="hby_Title"  SortExpression="hby_Title" AccessibleHeaderText="fgfg" />

                <asp:BoundField DataField="hby_Datetime" DataFormatString="{0:HH:mm}"  />

                <asp:CommandField ShowEditButton="True" />

                <asp:TemplateField ShowHeader="False">

                    <ItemTemplate>

                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete" OnClientClick="return confirm('确定要删除嗎?')"

                            Text="删除"></asp:LinkButton>

                    </ItemTemplate>

                </asp:TemplateField>

            </Columns>

        </asp:GridView>

背景代碼:

public partial class Default3 : System.Web.UI.Page

{

    DBconn db = new DBconn();

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!Page.IsPostBack)

            GView();

    }

    private void GView()

        string strbind = "select id,hby_title,hby_Datetime from tb_hby order by id desc";

        this.GridView1.DataSource = db.getDataSet(strbind);

        this.GridView1.DataBind();

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

        string str = "delete from tb_hby where id='"+GridView1.DataKeys[e.RowIndex].Value.ToString()+"'";

        db.Delete(str);

    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

        string cell1 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim();//第一列

        string cell2 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim();//第二列

        string str = "update tb_hby set hby_title='" + cell1 + "',hby_Datetime='" + cell2 + "' where id='" + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";

    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

下面是對綁定列轉換為模闆列的操作(包含将編輯列和删除列都轉化為模闆列):

private void GView()

{//綁定資料源

   string strbind = "select top 15 id,hby_title,hhhhh,hby_Datetime from tb_hby";

   this.GridView1.DataSource = db.getDataSet(strbind);

   this.GridView1.DataBind();

{//運作删除

   string str = "delete from tb_hby where id='"+GridView1.DataKeys[e.RowIndex].Value.ToString()+"'";

   db.Delete(str);

    //GView();

    Response.Write("<script language='JavaScript'>");

    Response.Write("alert('删除成功!');location.href='default3.aspx';");

    Response.Write("</script>");

 protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)

 {//激活編輯

 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

 {//運作更新

string EditTitle = ((TextBox)(GridView1.Rows[e.RowIndex].FindControl("TextBox1"))).Text.ToString().Trim();

   string DateTimestr = ((TextBox)(GridView1.Rows[e.RowIndex].FindControl("TextBox2"))).Text;//注意:日期字段不要加ToString(),否則會報錯,而nvarchar和int的字段能夠加

    string hhh = ((TextBox)(GridView1.Rows[e.RowIndex].FindControl("TextBox3"))).Text.ToString();

   string str = "update tb_hby set hby_title='" +EditTitle + "',hby_Datetime='" + DateTimestr + "',hhhhh='"+hhh+"' where id='" + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";

   db.Update(str);

   GridView1.EditIndex = -1;

   GView();

這裡千萬要注意:

當對綁定列轉換為模闆列了之後,編輯列這樣寫:

不轉化為模闆列的時候,編輯列這樣寫:

string EditTitle = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim();

這裡easy搞錯,以緻常常發生疑惑。

 {//取消編輯狀态

下面是前台代碼:

                <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True"

                    SortExpression="id" />

                <asp:TemplateField AccessibleHeaderText="fgfg" HeaderText="hby_Title" SortExpression="hby_Title">

                    <EditItemTemplate>

                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("hby_Title") %>'></asp:TextBox>

                    </EditItemTemplate>

                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("hby_Title") %>'></asp:Label>

                    </ItemTemplate>

                <asp:TemplateField>

                        <asp:TextBox ID="TextBox2" runat="server" Text='<%#  Eval("hby_Datetime", "{0:HH:mm}") %>'></asp:TextBox>

                        <asp:Label ID="Label2" runat="server" Text='<%# Eval("hby_Datetime", "{0:HH:mm}") %>'></asp:Label>

                </asp:TemplateField>

                <asp:TemplateField HeaderText="好">

                        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("hhhhh") %>'></asp:TextBox>

                        <asp:Label ID="Label3" runat="server" Text='<%# Bind("hhhhh") %>'></asp:Label>

                        <asp:LinkButton ID="LkBtnUpdate" runat="server" CausesValidation="True" CommandName="Update"

                            Text="更新"></asp:LinkButton>

                        <asp:LinkButton ID="LkBtnCtrl" runat="server" CausesValidation="False" CommandName="Cancel"

                            Text="取消"></asp:LinkButton>

                         <img src="img/edt.gif" /><asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Edit"

                            Text="編輯"></asp:LinkButton>

                </asp:TemplateField>

                <asp:TemplateField ShowHeader="False" HeaderText="删除">

                       <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete" OnClientClick="return confirm('确定要删除嗎?')"

以上綁定中,不管是Eval或者Bind都能夠。

  第三種方法:将編輯和顯示都放在模闆列中,代碼例如以下:

前台綁定:

<asp:TemplateField HeaderText="出團日期">

    <ItemTemplate>

      <asp:TextBox ID="tbx_ctrq" runat="server" Text='<%# Eval("cspd_ctrq") %>' Visible="false"></asp:TextBox>

      <asp:Label ID="lbl_ctrq" runat="server" Text='<%# Eval("cspd_ctrq") %>'></asp:Label>

   </ItemTemplate>

  <ControlStyle Width="84px" />

</asp:TemplateField>

<asp:TemplateField HeaderText="價格">

   <ItemTemplate>

   <asp:TextBox ID="tbx_price" runat="server" Text='<%# Eval("cspd_price") %>' Visible="false"></asp:TextBox>

   <asp:Label ID="lbl_price" runat="server" Text='<%# Eval("cspd_price") %>'></asp:Label>

 </ItemTemplate>

  <ControlStyle Width="60px" />

<asp:TemplateField HeaderText="編輯" ShowHeader="False">

  <ItemTemplate>

    <asp:LinkButton ID="LB_edit" runat="server" CausesValidation="False" CommandArgument='<%# ((GridViewRow) Container).RowIndex %>' CommandName="iEdit" Text="編輯"></asp:LinkButton>

   <asp:LinkButton ID="LB_upd" runat="server" CausesValidation="True" CommandName="iUpdate"

       Visible="false" CommandArgument='<%# ((GridViewRow) Container).RowIndex %>' Text="更新"></asp:LinkButton>

   <asp:LinkButton ID="LB_cancel" runat="server" CausesValidation="False" CommandName="iCancel" Visible="false" CommandArgument='<%# ((GridViewRow) Container).RowIndex %>' Text="取消"></asp:LinkButton>

  </ItemTemplate>

<asp:TemplateField HeaderText="删除">

  <ItemTemplate>

   <asp:LinkButton ID="LB_Del" runat="server" OnClientClick="return confirm('确定要删除嗎?')"

       CommandName="Delete" Text="删除"></asp:LinkButton>

背景代碼例如以下:

protected void GV_Main_RowCommand(object sender, GridViewCommandEventArgs e)

        if (e.CommandName == "iEdit")

            int rowIndex = Convert.ToInt32(e.CommandArgument);

            ((LinkButton)GV_Main.Rows[rowIndex].FindControl("LB_edit")).Visible = false;

            ((LinkButton)GV_Main.Rows[rowIndex].FindControl("LB_upd")).Visible = true;

            ((LinkButton)GV_Main.Rows[rowIndex].FindControl("LB_cancel")).Visible = true;

            ((Label)GV_Main.Rows[rowIndex].FindControl("lbl_chanpin")).Visible = false;

            ((TextBox)GV_Main.Rows[rowIndex].FindControl("tbx_chanpin")).Visible = true;

            ((Label)GV_Main.Rows[rowIndex].FindControl("lbl_ctrq")).Visible = false;

            ((TextBox)GV_Main.Rows[rowIndex].FindControl("tbx_ctrq")).Visible = true;

        if (e.CommandName == "iCancel")

            ((LinkButton)GV_Main.Rows[rowIndex].FindControl("LB_edit")).Visible = true;

            ((LinkButton)GV_Main.Rows[rowIndex].FindControl("LB_upd")).Visible = false;

            ((LinkButton)GV_Main.Rows[rowIndex].FindControl("LB_cancel")).Visible = false;

            ((Label)GV_Main.Rows[rowIndex].FindControl("lbl_chanpin")).Visible = true;

            ((TextBox)GV_Main.Rows[rowIndex].FindControl("tbx_chanpin")).Visible = false;

            ((Label)GV_Main.Rows[rowIndex].FindControl("lbl_ctrq")).Visible = true;

            ((TextBox)GV_Main.Rows[rowIndex].FindControl("tbx_ctrq")).Visible = false;

        if (e.CommandName == "iUpdate")

            if (!wpf.IsNum(((TextBox)GV_Main.Rows[rowIndex].FindControl("tbx_price")).Text.Trim()))

                Page.ClientScript.RegisterStartupScript(this.GetType(), "Startup", "<script>alert('價格必須是數字!');</script>");

             string strupd = "UPDATE [tb_cspd] SET [cspd_chanpin] = '" + wpf.checkStr(((TextBox)GV_Main.Rows[rowIndex].FindControl("tbx_chanpin")).Text.Trim()) + "', [cspd_ctrq] = '" + wpf.checkStr(((TextBox)GV_Main.Rows[rowIndex].FindControl("tbx_ctrq")).Text.Trim())

+ "', WHERE [id] = " + GV_Main.DataKeys[rowIndex][0].ToString();

                //Response.Write(strupd);

                wpf.SqlQuery(strupd);

                GV_Main.DataBind();

點選編輯button後統一列在文本框中進行編輯:

效果:

GridView編輯删除操作

首先還是在GridView1屬性中将DataKeyNames的值設定為主鍵名

前台代碼:

<asp:GridView ID="GridView3" runat="server" AutoGenerateColumns="False" OnRowCommand="GridView3_RowCommand" DataKeyNames="News_Id">

                        <Columns>

                            <asp:BoundField DataField="News_Title" HeaderText="标題" />

                            <asp:BoundField DataField="News_Source" HeaderText="來源" />

                            <asp:BoundField DataField="News_Date" HeaderText="日期" />

                            <asp:TemplateField HeaderText="編輯">

                                <ItemTemplate>

                                    <asp:LinkButton ID="LkBtnbianji" runat="server" CommandName="edit_ok" CommandArgument='<%# ((GridViewRow) Container).RowIndex  %>'>編輯</asp:LinkButton>

                                </ItemTemplate>

                            </asp:TemplateField>

                        </Columns>

                    </asp:GridView>

private void GView3()

        string strbind = "select News_Id,News_Title,News_Source,News_Date from tb_News";

        this.GridView3.DataSource = db.getDataSet(strbind);

        this.GridView3.DataBind();

    protected void GridView3_RowCommand(object sender, GridViewCommandEventArgs e)

        if (e.CommandName == "edit_ok")

            string strbind = "select News_Id,News_Title,News_Source,News_Date from tb_News where News_Id=" + GridView3.DataKeys[rowIndex][0].ToString();

            DataRow dr = db.getDataSet(strbind).Tables[0].Rows[0];

            this.BunAdd.CommandArgument = GridView3.DataKeys[rowIndex][0].ToString();

            this.TextTitle.Text = dr["News_Title"].ToString();

            this.TextType.Text=dr["News_Source"].ToString();

            this.TextDatetime.Text = dr["News_Date"].ToString();

    protected void BunAdd_Click(object sender, EventArgs e)

        string up = "update tb_News set News_Title='" + this.TextTitle.Text.Trim() + "',News_Source='" + this.TextType.Text.Trim() + "',News_Date='" + this.TextDatetime.Text.Trim() + "' where News_Id="+BunAdd.CommandArgument;

        db.Update(up);

        GView3();

繼續閱讀