GridView中各類控件的使用
<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;
}
}