gpt4 book ai didi

asp.net - 如何在后面的代码中将 TemplateField 添加到 gridview?

转载 作者:行者123 更新时间:2023-12-04 10:00:39 25 4
gpt4 key购买 nike

我有一个 DropDownList 其中有一个表格列表。在它下面有 GridView .根据从下拉列表框中选择的表,我将填充 GridView动态的。由于表可能有不同的列名,我需要为 GridView 动态创建模板字段。

以下是我的绑定(bind)方法。我有两个问题:

  • 我无法将绑定(bind)部分包裹在 if (!IsPostBack) 中自从GridView根据 DropDownList 的选择填充,所以每次我更改选择时,列都会被复制。
  • 而且我没有任何数据,我想我需要设置 ItemTemplate tField ( TemplateField ),但我该怎么做呢?

  • 我的绑定(bind)方法
    private void BindGridView()
    {
    DataSet ds = new DataSet();

    try
    {
    ds = …
    if (ds.Tables.Count > 0)
    {

    foreach (DataColumn dc in ds.Tables[0].Columns)
    {
    TemplateField tField = new TemplateField();
    tField.HeaderText = dc.ColumnName;
    GridView2.Columns.Add(tField);
    }

    GridView2.DataSource = ds.Tables[0];
    GridView2.DataBind();
    }
    else
    {

    }
    }
    catch (Exception ex)
    {

    }
    }

    最佳答案

    有几个步骤需要注意:

    第一步::
    创建 class inheriting ITemplate interface . Override方法 InstantiateIn() ITemplate界面。

    第二步:

    定义一个 constructor为您的class这需要 ListItemType 对象作为它的parameter .

    第三步::

    如果 Control 被添加到容器的 ControlCollection 必须绑定(bind)到一些 DataSource列,然后注册
    OnDataBinding 的处理程序 event .当事件发生时,从数据源中检索文本并将其分配给您的控件。例如,hyprLnk_DataBinding事件是为将数据绑定(bind)到您在 ItemTemplate 中创建的控件而定义的。 .

    public class TemplateGenerator : ITemplate // Class inheriting ITemplate
    {
    ListItemType type;
    string columnName;

    public TemplateGenerator(ListItemType t, string cN)
    {
    type = t;
    columnName= cN;
    }

    // Override InstantiateIn() method
    void ITemplate.InstantiateIn(System.Web.UI.Control container)
    {
    switch (type)
    {
    case ListItemType.Item:
    HyperLink hyprLnk = new HyperLink();
    hyprLnk.Target = "_blank"; //Optional.
    hyprLnk.DataBinding+=new EventHandler(hyprLnk_DataBinding);
    container.Controls.Add(hyprLnk);
    break;
    }
    }

    // The DataBinding event of your controls
    void hyprLnk_DataBinding(object sender, EventArgs e)
    {
    HyperLink hyprlnk = (HyperLink)sender;
    GridViewRow container = (GridViewRow)hyprlnk.NamingContainer;
    object bindValue = DataBinder.Eval(container.DataItem,columnName);
    // Adding check in case Column allows null values
    if (bindValue != DBNull.Value)
    {
    hyprlnk.Text = bindValue.ToString();
    hyprlnk.NavigateUrl = "http://www.google.com";
    }
    }
    }

    就这样。以上只是创建 ItemTemplate 的示例动态为 GridView 并将控件添加到项目模板。

    现在,下面是实际执行动态创建模板列的调用的函数。您可以在需要时调用此函数,例如来自您的 DropDownList 事件处理程序。
    protected void GenerateGridViewColumnsDynamically()
    {
    // Create the TemplateField
    TemplateField firstName = new TemplateField();
    firstName.HeaderText = "First_Name";
    firstName.ItemTemplate = new TemplateGenerator(ListItemType.Item, "FirstName");

    // Showing boundField example just for more context
    BoundField lastName = new BoundField();
    lastName.DataField = "LastName";
    lastName.HeaderText = "Last_Name";

    // Add the Columns now
    MyGridView.Columns.Add(firstName);
    MyGridView.Columns.Add(lastName);
    }

    注意:: FirstName 和 LastName 是 Columns其名称被传递给 constructor您的自定义 class : TemplateGenerator .

    关于asp.net - 如何在后面的代码中将 TemplateField 添加到 gridview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20692168/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com