zoukankan      html  css  js  c++  java
  • 代码添加 GridView 模板列一种方法示例

    动态添加列,关键是实现 ITemplate.InstantiateIn 方法。下面是一个添加 GridView 模板列的例子。

    C#代码

    <%...@ Page Language="C#" %>
    <%...@ Import Namespace="System.Data" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script runat="server">...
    ICollection CreateDataSource()
    ...{
        DataTable dt = new DataTable();
        DataRow dr;
        dt.Columns.Add(new DataColumn("id", typeof(Int32)));
        dt.Columns.Add(new DataColumn("text", typeof(string)));
        for (int i = 0; i < 6; i++)
        ...{
          dr = dt.NewRow();
          dr[0] = i;
          dr[1] = "列表项目 " + i.ToString();
          dt.Rows.Add(dr);
        }
        DataView dv = new DataView(dt);
        return dv;
    }

    public class GridViewTemplate : ITemplate
    ...{
        private DataControlRowType templateType;
        private string columnName;

        public GridViewTemplate( DataControlRowType type, string colname )
        ...{
          templateType = type;
          columnName = colname;
        }

        public void InstantiateIn( System.Web.UI.Control container )
        ...{
          switch (templateType)
          ...{
            case DataControlRowType.Header:
              Literal lc = new Literal();
              lc.Text = columnName;         
              container.Controls.Add(lc);         
              break;
            case DataControlRowType.DataRow:
              DropDownList drr = new DropDownList();
              drr.ID = "dropdown";
              drr.AppendDataBoundItems = true;
              drr.Items.Add(new ListItem("-----请选择------",""));
              drr.Items.Add(new ListItem("AA", "a"));
              drr.Items.Add(new ListItem("BB", "b"));
              drr.Items.Add(new ListItem("CC", "c"));
              container.Controls.Add(drr);
              break;
            default:
             break;
          }
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    ...{
        if (!IsPostBack)
        ...{
          TemplateField customField = new TemplateField();
          customField.ShowHeader = true;
          customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "动态添加列");
          customField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "");
          GridView1.Columns.Add(customField);
          GridView1.DataSource = CreateDataSource();
          GridView1.DataBind();
        }
    }

    protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e )
    ...{
        if (e.Row.RowType == DataControlRowType.DataRow)
        ...{
          //可以在这里访问数据库的其它字段的值,可以设置默认选择项,具体应用,看自己的发挥了。
          //下面只是例子,举一反三,不再费话了
          DataRowView gv = (DataRowView)e.Row.DataItem;
          int itemSeleted = Int32.Parse(gv.Row["id"].ToString()) > 3 ? 0 : Int32.Parse(gv.Row["id"].ToString());
          DropDownList dr = (DropDownList)e.Row.FindControl("dropdown");
          dr.SelectedIndex = itemSeleted;
        }
    }
    </script>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
    <title>GridView动态添加模板列的例子</title>
    </head>
    <body>
    <form id="form1" runat="server">
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
         OnRowDataBound="GridView1_RowDataBound">
        <Columns>
          <asp:BoundField HeaderText="标题" DataField="text"/>
        </Columns>
    </asp:GridView>
    </form>
    </body>
    </html>

  • 相关阅读:
    [转]JavaWeb学习总结(五十)——文件上传和下载
    [转]JavaWeb学习总结(四十九)——简单模拟Sping MVC
    [转]JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
    [转]javaweb学习总结(四十七)——监听器(Listener)在开发中的应用
    [转]javaweb学习总结(四十六)——Filter(过滤器)常见应用
    [转]javaweb学习总结(四十五)——监听器(Listener)学习二
    js数组的方法
    神策埋点
    微信分享
    微信小程序
  • 原文地址:https://www.cnblogs.com/fhuafeng/p/1772941.html
Copyright © 2011-2022 走看看