如何将gridview绑定到通用字符串列表?

时间:2011-04-13 14:34:16

标签: gridview

这应该很简单,但我在这场战斗中失败了。我有一个gridview。我想要的只是让用户能够在其中输入名称,单击添加并添加值。如果他们犯了错误,我也想使用delete命令。我试过Eval和Bind。但事情总是出错。

我有一个文本框输入第一个。并且在页脚中输入一个文本框来输入值。输入后,它们将添加到通用列表(字符串)并重新绑定到gridview。但它在尝试绑定到列表时失败。

在下面的标记中,DataItem.Alias< - Alias实际上是通用列表的名称

    <asp:GridView ID="gvAlias"
    runat="server"     
   ShowFooter="True"  AutoGenerateColumns="false"
   ShowHeaderWhenEmpty="True" ShowHeader="False" >
    <Columns>
          <asp:TemplateField>
               <ItemTemplate>
                   <%# DataBinder.Eval(Container, "DataItem.Alias")%>  />
                </ItemTemplate>
               <FooterTemplate>
                  <asp:TextBox ID="txtFooterAlias"  runat="server" />
                  <asp:LinkButton ID="btnFooterAdd" runat="server"  OnClick="AddFromFooter">Add New</asp:LinkButton>
               </FooterTemplate>
          </asp:TemplateField>
          <asp:CommandField ShowDeleteButton="True"   />
      </Columns>
      <EmptyDataTemplate>
           <asp:TextBox ID="txtEmptyAlias" runat="server"   />
           <asp:LinkButton ID="btnEmptyAdd" runat="server" OnClick="AddFromEmpty">Add New</asp:LinkButton>
      </EmptyDataTemplate>
</asp:GridView>

和背后的代码......

Public Sub BindGridView()

Dim oThis As This 'this is a class I have that has a property which is a generic list of string

    gvAlias.DataSource = oThis.Alias.ToArray
    gvAlias.DataBind()

End Sub

1 个答案:

答案 0 :(得分:0)

根据您的描述,Alias的类型不明确。它是匿名类型吗?

然而,将网格与字符串列表绑定的非常简单的方法是将它们转换为任何时间。

var aliasList = new List<string>() { 
               "Value1",
               "Value2",
               "Value3"
            };
//This will create new anonymous type with Name field.
var tryName = (from nm in nameList
                select new { Alias = nm }).ToArray();
gvAlias.DataSource = tryName;
gvAlias.DataBind();

现在您可以在标记中绑定此“别名”字段

<asp:TemplateField>
               <ItemTemplate>
                   <%# DataBinder.Eval(Container, "Alias")%>  />
                </ItemTemplate>
               <FooterTemplate>
                  <asp:TextBox ID="txtFooterAlias"  runat="server" />
                  <asp:LinkButton ID="btnFooterAdd" runat="server"  OnClick="AddFromFooter">Add New</asp:LinkButton>
               </FooterTemplate>
          </asp:TemplateField>
          <asp:CommandField ShowDeleteButton="True"   />