有条件地在GridView中更改控件类型

时间:2016-05-11 05:29:02

标签: c# asp.net gridview

我正在使用Gridview模板字段,我想检查

如果Session已设置,则从Session中检索RegionID并将其存储在隐藏字段中, 其他 显示包含所有区域的下拉框。 示例代码。

<asp:TemplateField HeaderText="Region">
<ItemTemplate>
<% if(Session["REGION"]!=null) %>
<asp:TextBox ID="txtRegion" value=<%Session["REGION"]% />
<% else %>
<asp:DropDownList ID="txtRegion" />
</ItemTemplate>

我应该如何做到这一点。

任何想法。

1 个答案:

答案 0 :(得分:0)

<ItemTemplate>

中使用占位符
    <asp:TemplateField HeaderText="Region">
      <ItemTemplate>
        <asp:PlaceHolder ID="PlaceHolder1" runat="server">
      </ItemTemplate>
    </asp:TemplateField>

然后在GridView RowDataBound事件后面的代码中:

    if( e.Row.RowType == DataRow ){
      PlaceHolder PlaceHolder1 = (PlaceHolder) e.Row.FindControl("PlaceHolder1");

      Control tmpCtrl = null;

      if(Session["REGION"] != null) {
         tmpCtrl = new HiddenField();
         ((HiddenField) tmpCtrl).Value = (string) Session["REGION"];
      }
      else {
        tmpCtrl = new DropDownList();
        // To be determined
        // ( ( DropDownList ) tmpCtrl ).DataTextField = "";
        // ( ( DropDownList ) tmpCtrl ).DataValueField = "";
        // ( ( DropDownList ) tmpCtrl ).DataSource = ;
        // ( ( DropDownList ) tmpCtrl ).DataBind();
      }

      tmpCtrl.ID = "txtRegion";
      PlaceHolder1.Controls.Add( tmpCtrl );
    }

动态下拉列表如果生成,仍然需要绑定到您的区域列表。只有您知道该列表所在的位置。但是,您可以在实例化并在DataTextField上面添加DataValueFieldelse名称后立即绑定