Как мне привязать gridview к общему списку строк?

#gridview

#gridview

Вопрос:

Это должно быть просто, но я проигрываю эту битву. У меня есть gridview. Все, что я хочу, это чтобы пользователь мог вводить в него имена, нажимать добавить и добавлять значения. Я также хочу использовать команду delete, если они допустят ошибку. Я пробовал Eval и Bind. Но что-то продолжает идти не так.

У меня есть текстовое поле для ввода первого. И alos текстовое поле в нижнем колонтитуле для ввода значений. При вводе они добавляются в общий список (string) и повторно привязываются к gridview. Но при попытке привязки к списку происходит сбой.

В приведенной ниже разметке DataItem.Псевдоним <- 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>
  

и код, лежащий в основе…

Общедоступный подраздел 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. Не могли бы вы подробнее рассказать о том, «что-то продолжает идти не так»?

Ответ №1:

Из вашего описания неясен тип псевдонима. Это анонимный тип?

Однако очень простой способ привязать grid к списку строк — преобразовать их в любое время.

 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"   />