ASP.NET GridView_第四篇_控件和HTML标记的容器 TemplateField 模板列

本文详细介绍了ASP.NET中GridView控件结合模板列(TemplateField)的应用实践,包括数据绑定、分页、编辑、删除等功能实现。通过具体示例展示了如何自定义列内容以及在编辑模式下使用不同控件进行数据输入。

模板列TemplateField

<%@ Page Language="C#" %>

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Web.UI" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.Bind();
            }
        }
        private void Bind()
        {
            DataTable dt = this.CreateDataSource();
            GridView1.DataSource = dt;
            GridView1.DataKeyNames = new string[] { "id" };
            GridView1.DataBind();
        }
        private DataTable CreateDataSource()
        {
            DataTable dt = new DataTable("info");
            dt.Columns.Add("id", typeof(int));
            dt.Columns.Add("name", typeof(string));
            dt.Columns.Add("sex", typeof(int));
            dt.Columns.Add("edu", typeof(int));
            for (int i = 1; i <= 100; i++)
            {
                DataRow dr = dt.NewRow();
                dr[0] = 1000 + i;
                dr[1] = "名字" + i;
                dr[2] = (i % 2).ToString();
                dr[3] = ((i % 3) + 1).ToString();
                dt.Rows.Add(dr);
            }
            return dt;
        }
        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
            Bind();
        }
        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            GridView1.EditIndex = -1;
            Bind();
        }
        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            string sqlStr = "DELETE FROM info WHERE id=':vId'";
            string id = GridView1.DataKeys[e.RowIndex].Values[0].ToString();
            sqlStr = sqlStr.Replace(":vId", id);
            // 执行数据库删除
            this.TextBox1.Text = "已执行删除.";
            Bind();
        }
        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            string sqlStr = "update info set sex=':vSex',name=':vName',edu=':vEdu' where id=:vId'";
            string id = GridView1.DataKeys[e.RowIndex].Values[0].ToString();
            string name = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txt_name")).Text.ToString().Trim();
            string sex = ((RadioButtonList)GridView1.Rows[e.RowIndex].FindControl("rbl_sex")).SelectedValue.Trim();
            string edu = ((DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddl_edu")).SelectedItem.Text.ToString();
            sqlStr = sqlStr.Replace(":vSex",sex).Replace(":vName",name).Replace(":vEdu", edu).Replace(":vId", id);
            // 执行数据库更新
            GridView1.EditIndex = -1;
            Bind();
        }
        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView1.PageIndex = e.NewPageIndex;
            this.Bind();
        }
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Label lbl = ((Label)e.Row.FindControl("lbl_edu"));
                if (lbl != null)
                {
                    switch (lbl.Text)
                    {
                        case "1":
                            lbl.Text = "学士";
                            break;
                        case "2":
                            lbl.Text = "硕士";
                            break;
                        case "3":
                            lbl.Text = "博士";
                            break;
                    }
                }
                lbl = ((Label)e.Row.FindControl("lbl_sex"));
                if (lbl != null)
                {
                    switch (lbl.Text)
                    {
                        case "1":
                            lbl.Text = "男";
                            break;
                        case "0":
                            lbl.Text = "女";
                            break;
                    }
                }
                DropDownList ddl = (DropDownList)e.Row.FindControl("ddl_edu");
                if (ddl != null)
                {
                    ddl.Items.Clear();
                    ddl.Items.Add(new ListItem("学士", "1"));
                    ddl.Items.Add(new ListItem("硕士", "2"));
                    ddl.Items.Add(new ListItem("博士", "3"));
                }
                RadioButtonList rbl = (RadioButtonList)e.Row.FindControl("rbl_sex");
                if (rbl != null)
                {
                    rbl.Items.Clear();
                    rbl.Items.Add(new ListItem("男", "1"));
                    rbl.Items.Add(new ListItem("女", "0"));
                    string selectedValue = rbl.DataValueField.ToString();
                    switch (selectedValue)
                    {
                        case "1":
                            rbl.Items[0].Selected = true;
                            break;
                        case "0":
                            rbl.Items[1].Selected = true;
                            break;
                    }
                }
            }
        }  
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="true"
        OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound"
        OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowDeleting="GridView1_RowDeleting"
        OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating">
        <Columns>
            <asp:TemplateField HeaderText="编号">
                <ItemTemplate>
                    <%# this.GridView1.PageIndex * this.GridView1.PageSize + this.GridView1.Rows.Count + 1%>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="学号">
                <ItemTemplate>
                    <asp:Label ID="lbl_id" runat="server" Text='<%# Bind("id")%>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txt_id" runat="server" Text='<%# Bind("id")%>'></asp:TextBox>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="名字">
                <ItemTemplate>
                    <asp:Label ID="lbl_name" runat="server" Text='<%# Bind("name")%>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txt_name" runat="server" Text='<%# Bind("name")%>'></asp:TextBox>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="性别">
                <ItemTemplate>
                    <asp:Label ID="lbl_sex" runat="server" Text='<%# Bind("sex")%>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:RadioButtonList ID="rbl_sex" runat="server" DataValueField='<%# Bind("sex")%>'>
                    </asp:RadioButtonList>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="学历">
                <ItemTemplate>
                    <asp:Label ID="lbl_edu" runat="server" Text='<%# Bind("edu")%>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList ID="ddl_edu" runat="server" DataValueField='<%# Bind("edu")%>'>
                    </asp:DropDownList>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="操作" ShowHeader="False">
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit"
                        Text="编辑" OnClientClick="return confirm('确认要编辑吗?');">  
                    </asp:LinkButton>
                    <asp:LinkButton ID="LinkButton3" runat="server" CausesValidation="False" CommandName="Delete"
                        Text="删除" OnClientClick="return confirm('确认要删除吗?');">  
                    </asp:LinkButton>
                    <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Select"
                        Text="选择"></asp:LinkButton>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update"
                        Text="更新"></asp:LinkButton>
                    <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel"
                        Text="取消"></asp:LinkButton>
                </EditItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    </form>
</body>
</html>


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值