在上一篇文章[ASP]自訂GridVieew(連接),我們提到了自訂方式

這一篇要來紀錄的是更為了彈性調整的刪除與修改的範例


事前準備:

環境: VS2012

資料庫: SQL Server 2008

與上一篇不同的是這邊為了介紹彈性的資料讀取與資料刪除修改

增加了一個欄位以及設定了主鍵

資料表:

CREATE TABLE candidate(
CNo Int,
CName Nvarchar(max),
CAddress Nvarchar(max),
CGender Bit,
Primary Key(CNo)
)

資料:

INSERT INTO candidate VALUES(1,'TOM','Taiwan','True');
INSERT INTO candidate VALUES(2,'Kally','USA','False');
INSERT INTO candidate VALUES(3,'John','UK','False');
INSERT INTO candidate VALUES(4,'Stanley','Japan','True');

 


由於要提高彈性,所以這一次取得DataSet並由GridView.Bind()方式,不藉由AutoGenerateColumns=true去產生資料欄位

1.先設定需要擁有的資料欄位

此GridView包含指令部分(四個按鈕)以及欄位部分
指令藉由CommandName去設定執行指令,並設定指令事件(RowCancelingEdit、RowCancelingEdit、RowDeleting、RowUpdating)

欄位的部分'<%#Bind("欄位名稱") %>' 去連結DataSet資料欄位,至於資料呈現位置依據控制項去調整

CNo由於是主鍵故在此也設定Readonly

            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating">
                <Columns>
                    <%--指令--%>
                    <asp:TemplateField>
                        <EditItemTemplate>
                            <asp:Button ID="update_btn" runat="server" Text="更新" CommandName="Update" /><br />
                            <asp:Button ID="cancel_btn" runat="server" Text="取消" CommandName="Cancel" />
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Button ID="edit_btn" runat="server" Text="編輯" CommandName="Edit" /><br />
                            <asp:Button ID="delete_btn" runat="server" Text="刪除" CommandName="Delete" OnClientClick="return confirm('確定要刪除此筆資料嗎?');" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <%--欄位--%>
                    <asp:BoundField HeaderText="CNo" DataField="CNo" ReadOnly="true" />
                    <asp:TemplateField HeaderText="CName">
                        <ItemTemplate>
                            <asp:Label ID="lb_Nmae" runat="server" Text='<%#Bind("CName") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="tbx_Name" runat="server" Text='<%#Bind("CName") %>'></asp:TextBox>
                        </EditItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="CAddress">
                        <ItemTemplate>
                            <asp:Label ID="lb_Address" runat="server" Text='<%#Bind("CAddress") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="tbx_Address" runat="server" Text='<%#Bind("CAddress") %>'></asp:TextBox>
                        </EditItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="CGender">
                        <EditItemTemplate>
                            <asp:DropDownList ID="dll_MbGender" runat="server" SelectedValue='<%#Bind("CGender") %>'>
                                <asp:ListItem Value="False">Female</asp:ListItem>
                                <asp:ListItem Value="True">Male</asp:ListItem>
                            </asp:DropDownList>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:DropDownList ID="dll_MbGender" runat="server" Enabled="false" SelectedValue='<%#Bind("CGender") %>'>
                                <asp:ListItem Value="False">Female</asp:ListItem>
                                <asp:ListItem Value="True">Male</asp:ListItem>
                            </asp:DropDownList>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

  2.此篇省略與資料庫連結部分,直接提修改刪除的程式碼,由於會使用到所以請於前一篇去做參考

 

//點擊編輯按鈕
   protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView1.EditIndex = e.NewEditIndex;
        GVgetData();
    } 
//點擊取消按鈕
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        GridView1.EditIndex = -1;
        GVgetData();
    }

 

 //點擊更新按鈕
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        String updateString = "UPDATE candidate SET CName=@CName,CAddress=@CAddress,CGender=@CGender WHERE CNo=@CNo";
        SqlConnection cn = new SqlConnection(connectString);
        SqlCommand cmd = new SqlCommand(updateString, cn);
        cmd.Parameters.Add("@CNo", SqlDbType.Int);
        cmd.Parameters.Add("@CName", SqlDbType.NChar);
        cmd.Parameters.Add("@CAddress", SqlDbType.NChar);
        cmd.Parameters.Add("@CGender", SqlDbType.NChar);
        cmd.Parameters["@CNo"].Value = GridView1.Rows[e.RowIndex].Cells[1].Text;
        cmd.Parameters["@CName"].Value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbx_Name")).Text;
        cmd.Parameters["@CAddress"].Value = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbx_Address")).Text;
        cmd.Parameters["@CGender"].Value = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("dll_MbGender")).SelectedValue;
        cn.Open();
        cmd.ExecuteNonQuery();
        cn.Close();
        GridView1.EditIndex = -1;
        GVgetData();
    }
    //點擊刪除按鈕
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        String deleteString = "DELETE FROM candidate WHERE CNo=@CNo";
        SqlConnection cn = new SqlConnection(connectString);
        SqlCommand cmd = new SqlCommand(deleteString, cn);
        cmd.Parameters.Add("@CNo", SqlDbType.Int);
        cmd.Parameters["@CNo"].Value = int.Parse(GridView1.Rows[e.RowIndex].Cells[1].Text);
        cn.Open();
        cmd.ExecuteNonQuery();
        cn.Close();
        GVgetData();
    }

輸出結果:

 gridview2畫面1.PNG    

編輯:

gridview2編輯1.PNG gridview2編輯2.PNG  

刪除:

 gridview2刪除  

arrow
arrow
    全站熱搜

    chuangmaster 發表在 痞客邦 留言(0) 人氣()