GridView中各類控件的使用

ASPX:
<asp:GridView ID="gvUsers" runat="server" AutoGenerateColumns="false" HeaderStyle-HorizontalAlign="center" DataKeyNames="UserID" ShowFooter="true"
                    OnRowDeleting="gvUsers_RowDeleting" OnRowEditing="gvUsers_RowEditing"
                    OnRowUpdating="gvUsers_RowUpdating" OnRowCancelingEdit="gvUsers_RowCancelingEdit" OnRowDataBound="gvUsers_RowDataBound" OnPageIndexChanging="gvUsers_PageIndexChanging" AllowPaging="True" OnRowCommand="gvUsers_RowCommand" >
                    <Columns>
                        <asp:TemplateField>
                            <EditItemTemplate>
                                <asp:LinkButton ID="lbtnUpdate" runat="server" Text="更新" CommandName="Update" CommandArgument='<%# Eval("UserID") %>' CausesValidation="True"></asp:LinkButton>
                                <asp:LinkButton ID="lbtnCancel" runat="server" Text="取消" CommandName="Cancel"></asp:LinkButton>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:LinkButton ID="lbtnEdit" runat="server" Text="編輯" CommandName="Edit" CommandArgument='<%# Eval("UserID") %>' OnClientClick="return confirm('是否要編輯該用戶信息?');"></asp:LinkButton>
                                <asp:LinkButton ID="lbtnDelete" runat="server" Text="刪除" CommandName="Delete" CommandArgument='<%# Eval("UserID") %>' OnClientClick="return confirm('是否要刪除該用戶信息?');"></asp:LinkButton>
                            </ItemTemplate>
                            <FooterTemplate>
                                <asp:LinkButton ID="lbtnInsert" runat="server" Text="新增" CommandName="Insert"></asp:LinkButton>
                                <asp:LinkButton ID="lBtnCancel" runat="server" Text="取消" CommandName="ICancel"></asp:LinkButton>
                            </FooterTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="序号" ItemStyle-HorizontalAlign="center">
                                <ItemTemplate>
                                <%# this.gvUsers.PageIndex * this.gvUsers.PageSize + this.gvUsers.Rows.Count + 1%>
                                </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="用戶名">
                            <EditItemTemplate>
                                <asp:TextBox ID="txtUserName" runat="server" Text='<%# Eval("UserName") %>' Width="100"></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="lblUserName" runat="server" text='<%# Eval("UserName") %>' ></asp:Label>
                            </ItemTemplate>
                            <FooterTemplate>
                                <asp:TextBox ID="txtUserName" runat="server" Width="100"></asp:TextBox>
                            </FooterTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="登錄用戶名">
                            <EditItemTemplate>
                                <asp:TextBox ID="txtLoginName" runat="server" Text='<%# Eval("LoginName") %>' Width="100"/>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="lblLoginName" runat="server" text='<%# Eval("LoginName") %>'></asp:Label>
                            </ItemTemplate>
                            <FooterTemplate>
                                <asp:TextBox ID="txtLoginName" runat="server" Width="100"></asp:TextBox>
                            </FooterTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="所在部門">
                            <EditItemTemplate>
                                <asp:DropDownList ID="ddlDepartMent" runat="server" Width="100" DataValueField='<%# Eval("DepartMentId") %>' OnDataBound="ddlDepartMent_DataBound"></asp:DropDownList>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="lblDepartment" runat="server" text='<%# Eval("DepartMentName") %>'></asp:Label>
                            </ItemTemplate>
                            <FooterTemplate>
                                <asp:DropDownList ID="ddlDepartMent" runat="server" Width="100"></asp:DropDownList>
                            </FooterTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="所在群組">
                            <EditItemTemplate>
                                <asp:DropDownList ID="ddlRole" runat="server" Width="100" DataValueField='<%# Eval("RoleId") %>' OnDataBound="ddlRole_OnDataBound"></asp:DropDownList>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="lblRole" runat="server" text='<%# Eval("RoleName") %>'></asp:Label>
                            </ItemTemplate>
                            <FooterTemplate>
                                <asp:DropDownList ID="ddlRole" runat="server" Width="100"></asp:DropDownList>
                            </FooterTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField >
                            <ItemTemplate>
                                <asp:Label ID="lblDepartMentId" runat="server" text='<%# Eval("DepartMentId") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField >
                            <ItemTemplate>
                                <asp:Label ID="lblRoleId" runat="server" text='<%# Eval("RoleId") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField >
                            <ItemTemplate>
                                <asp:Label ID="lblUserId" runat="server" text='<%# Eval("UserId") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                </Columns>
                <HeaderStyle HorizontalAlign="Center" />
            </asp:GridView>

C#:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            GridViewDataBind();
        }
    }

    /// <summary>
    /// 綁定GridView數據源
    /// </summary>
    protected void GridViewDataBind()
    {
        Hashtable ht = new Hashtable();
        DataTable dt = Users.QueryUser(Session["StrConn"].ToString(), ht);
        gvUsers.DataSource = dt.DefaultView;
        gvUsers.DataBind();
    }

    /// <summary>
    /// GridView中的部門列表的數據源設定及初始值的設定
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ddlDepartMent_DataBound(object sender, EventArgs e)
    {
        DropDownList ddl = (DropDownList)sender;
        PubFunction.DataBindDropDownList(DepartMent.Query(Session["StrConn"].ToString(), new Hashtable()), ddl);
        GridViewRow gv = (GridViewRow)ddl.NamingContainer;
        if (gv.DataItem != null)
        {
            string DepartMentID = ((DataRowView)gv.DataItem)["DepartMentId"].ToString();
            ListItem lst =ddl.Items.FindByValue(DepartMentID);
            if (lst != null)
                lst.Selected = true;
        }
    }

    /// <summary>
    /// GridView中的角色列表的數據源設定及初始值的設定
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ddlRole_OnDataBound(object sender, EventArgs e)
    {
        DropDownList ddl = (DropDownList)sender;
        PubFunction.DataBindDropDownList(Role.Query(Session["StrConn"].ToString(), new Hashtable()), ddl);
        GridViewRow gv = (GridViewRow)ddl.NamingContainer;
        if (gv.DataItem != null)
        {
            string RoleID = ((DataRowView)gv.DataItem)["RoleId"].ToString();
            ListItem lst = ddl.Items.FindByValue(RoleID);
            if (lst != null)
                lst.Selected = true;
        }
    }

    /// <summary>
    /// 綁定GridView中的數據列
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void gvUsers_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Footer)
        {
            //新增時下拉控件的值
            DropDownList ddlDepartment = (DropDownList)e.Row.FindControl("ddlDepartMent");
            PubFunction.DataBindDropDownList(DepartMent.Query(Session["StrConn"].ToString(), new Hashtable()), ddlDepartment);
            DropDownList ddlRole = (DropDownList)e.Row.FindControl("ddlRole");
            PubFunction.DataBindDropDownList(Role.Query(Session["StrConn"].ToString(), new Hashtable()), ddlRole);
        }

        if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Header || e.Row.RowType == DataControlRowType.Footer)
        {
            //三個欄位的隱藏,不能直接在ASPX文件中設定Visible=false,否則就無法取到值
            e.Row.Cells[6].Visible = false;
            e.Row.Cells[7].Visible = false;
            e.Row.Cells[8].Visible = false;
        }
    }

    /// <summary>
    /// GridView取消編輯事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void gvUsers_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        gvUsers.EditIndex = -1;
        GridViewDataBind();
    }

    /// <summary>
    /// GridView開始編輯事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void gvUsers_RowEditing(object sender, GridViewEditEventArgs e)
    {
        if (((Label)gvUsers.Rows[e.NewEditIndex].FindControl("lblUserName")).Text.ToString().ToUpper() != "SYSTEM")
        {
            gvUsers.EditIndex = e.NewEditIndex;
            //當前編輯行高亮顯示    
            this.gvUsers.EditRowStyle.BackColor = Color.FromName("#F7CE90");           
            GridViewDataBind();
        }
    }

    /// <summary>
    /// GridView的刪除事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void gvUsers_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        if (((Label)gvUsers.Rows[e.RowIndex].FindControl("lblUserName")).Text.ToString().ToUpper() != "SYSTEM")
        {
            GridViewRow gvrow = (GridViewRow)gvUsers.Rows[e.RowIndex];
            Users.Delete(Session["StrConn"].ToString(), gvrow.Cells[8].Text.ToString());
            GridViewDataBind();
        }
    }

    /// <summary>
    /// GridView的更新事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void gvUsers_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow gvrow =gvUsers.Rows[e.RowIndex];
        Hashtable ht = new Hashtable();
        ht.Add("UserName",DBString.GetQuotedString(((TextBox)gvrow.FindControl("txtUserName")).Text.ToString()));
        ht.Add("LoginName", DBString.GetQuotedString(((TextBox)gvrow.FindControl("txtLoginName")).Text.ToString()));
        ht.Add("DepartMentId",((DropDownList)gvrow.FindControl("ddlDepartMent")).SelectedValue.ToString());
        ht.Add("RoleId", ((DropDownList)gvrow.FindControl("ddlRole")).SelectedValue.ToString());
        Users.Update(Session["StrConn"].ToString(), ht, string.Format(" where UserID='{0}'",((Label)gvrow.Cells[8].FindControl("lblUserId")).Text.ToString()));
        gvUsers.EditIndex = -1;
        GridViewDataBind();
    }

    /// <summary>
    /// 分頁代碼
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void gvUsers_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvUsers.PageIndex = e.NewPageIndex;
        GridViewDataBind();
    }

    /// <summary>
    /// GridView中Insert事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void gvUsers_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        switch(e.CommandName)
        {
            case "Insert":
                gvUsers.EditIndex = -1;
                Hashtable ht = new Hashtable();
                SymmetricMethod sm = new SymmetricMethod();
                ht.Add("UserName",DBString.GetQuotedString(((TextBox)gvUsers.FooterRow.FindControl("txtUserName")).Text.ToString()));
                ht.Add("LoginName", DBString.GetQuotedString(((TextBox)gvUsers.FooterRow.FindControl("txtLoginName")).Text.ToString()));
                ht.Add("Password", DBString.GetQuotedString(sm.Encrypto("1111")));
                ht.Add("DepartMentId", ((DropDownList)gvUsers.FooterRow.FindControl("ddlDepartment")).SelectedItem.Value.ToString());
                ht.Add("RoleID", ((DropDownList)gvUsers.FooterRow.FindControl("ddlRole")).SelectedItem.Value.ToString());
                Users.Add(Session["StrConn"].ToString(), ht);
                GridViewDataBind();
                break;
            case "ICancel" :
                ((TextBox)gvUsers.FooterRow.FindControl("txtUserName")).Text = "";
                ((TextBox)gvUsers.FooterRow.FindControl("txtLoginName")).Text = "";
                ((DropDownList)gvUsers.FooterRow.FindControl("ddlDepartment")).SelectedIndex = 0;
                ((DropDownList)gvUsers.FooterRow.FindControl("ddlRole")).SelectedIndex = 0;
                break;
        }
    }

posted @ 2008-02-21 09:54  马建康  阅读(400)  评论(0)    收藏  举报