【问题标题】:Bind an IEnumerable column inside a gridview templatefield在 gridview 模板字段中绑定一个 IEnumerable 列
【发布时间】:2013-06-17 15:12:06
【问题描述】:

我有以下设置

ASPX:

<asp:GridView runat="server" ID="gridRepresentatives" AllowPaging="True" DataKeyNames="Id" OnRowCommand="BtnSubmitCommand" OnRowCreated="GridRepresentativesCreated" CssClass="grid" AutoGenerateColumns="False" Width="100%" EmptyDataText="You don't have rights to manage any organisations.">
    <Columns>
        <asp:BoundField DataField="Position" HeaderText="Position"/>
        <asp:BoundField DataField="Name" HeaderText="Name"/>
        <asp:BoundField DataField="Address" HeaderText="Address"/>
        <asp:TemplateField HeaderText="Roles">
            <ItemTemplate>
                <asp:DropDownList runat="server" ID="dropdownRoles" DataMember="Roles" Width="205px">    
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Action">
            <ItemTemplate>
                <asp:DropDownList runat="server" ID="dropdownActions" Width="100px">
                    <asp:ListItem Text="Edit" Value="0"></asp:ListItem>
                    <asp:ListItem Text="Remove" Value="1"></asp:ListItem>
                </asp:DropDownList>
                <asp:Button runat="server" CommandName="Submit" ID="btnSubmit" Text="Go"/>
            </ItemTemplate>
            <ItemStyle CssClass="grid-actions"></ItemStyle>
        </asp:TemplateField>
    </Columns>
    <AlternatingRowStyle CssClass="alternate"></AlternatingRowStyle>
</asp:GridView>

代码隐藏:

 var client = new RepresentativeManagementServiceClient();
            try
            {
                IEnumerable<Representative> representatives =     client.ListRepresentatives("01", _organisationId, role);
                gridRepresentatives.DataSource = representatives;
                gridRepresentatives.DataBind();
            }
            catch (Exception ex)
            {
                lblError.Visible = true;
                lblError.Text = ex.Message;
                return;
            }
            finally
            {
                client.Close();
            }

gridview 绑定到具有一组公共属性的 Represenative 类型的 IEnumerable。我想将内部的 IEnumerable Roles 属性绑定到 gridview 模板字段内的下拉列表。我试图将 Datamember 设置为属性(角色)的名称,但它只是不绑定并且不会引发任何错误。我该怎么做?

【问题讨论】:

  • 你会失去你的Representative类吗?我不确定,但我认为如果您将Roles 设置为DataSourceDropDown 而不是DataMember 将起作用。

标签: c# asp.net .net-3.5


【解决方案1】:

您想为该下拉菜单绑定数据源:

<asp:TemplateField HeaderText="Roles">
    <ItemTemplate>
        <asp:DropDownList runat="server" ID="dropdownRoles" DataSource='<%# Eval("Roles") %>' Width="205px">    
        </asp:DropDownList>
    </ItemTemplate>
</asp:TemplateField>

【讨论】:

  • 谢谢您,先生,就是这样。我不知道为什么 DataSource 属性没有出现在智能感知中,它可以为大家省去很多麻烦。
【解决方案2】:

你应该设置 DropDownList 的SelectedValue 属性。智能由于某种原因没有显示出来,但你可以这样使用它

    <asp:TemplateField HeaderText="Roles">
        <ItemTemplate>
            <asp:DropDownList runat="server" SelectedValue='<%# Eval("Roles") %>'>    
            </asp:DropDownList>
        </ItemTemplate>
    </asp:TemplateField>

但是在绑定它之前,你应该用可能的值填充 DropDown。手动或使用一些 数据源(我认为 ObjectDataSource 在你的情况下会很好)

【讨论】:

  • 没有“SelectedValue”,代表可以有一个或多个角色。我只想在下拉列表中显示代表的所有角色。
猜你喜欢
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
相关资源
最近更新 更多