【问题标题】:Having an issue while binding data to gridview将数据绑定到 gridview 时出现问题
【发布时间】:2017-04-25 10:24:18
【问题描述】:

我有模特

public class ItemHistory
{
    public int TotalItems;
    public int ScannedItems;
    public int PendingItems;
}

在按钮单击事件上,我想根据该值加载一个网格。 Button_Click 的代码

int TotalItems = Convert.ToInt32(lblItemsScanned.Text);
int ScannedItems = Convert.ToInt32(lblItemsScanned.Text);

int PendingItems = TotalItems - ScannedItems;
List<ItemHistory> ih = new List<ItemHistory>();
ih.Add(new ItemHistory
{TotalItems, ScannedItems, PendingItems});
gvrecap.DataSource = ih;
gvrecap.DataBind();

但是,它给了我以下错误:

无法使用集合初始化程序初始化类型“ConsignmentCreation.ItemHistory”,因为它没有实现“System.Collections.IEnumerable”

无法理解。请帮助...在此先感谢

感谢您的解决方案,但我现在在Databind(); 遇到了一个新问题

在所选数据源中找不到名为“TotalItems”的字段或属性。

下面是Gridview的排列方式:

                                                  <asp:GridView ID="gvrecap" runat="server"
                            AutoGenerateColumns="false" PagerSettings-Mode="NumericFirstLast" PageSize="25" Width="741px">
                            <Columns>
                                <asp:BoundField DataField="TotalItems" HeaderText="TotalItems" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="50" />
                                 <asp:BoundField DataField="ScannedItems" HeaderText="ScannedItems" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="50" />
                                 <asp:BoundField DataField="PendingItems" HeaderText="PendingItems" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="50" />
                            </Columns>
                        </asp:GridView>

【问题讨论】:

  • 您不能使用列表进行绑定,因为它实现了 IEnumerable,而 ItemHistory 没有。看看here
  • 编辑您的列,选择 TotalItems 列并确保“设计”部分中的(名称)拼写正确。对“数据”部分执行相同操作,并确保“数据属性名称”也正确。

标签: c# asp.net gridview ienumerable


【解决方案1】:

您使用新的 ItemHistory 对象初始化列表的语法不太正确。您需要指定字段名称和值。

            int pendingItems = 10;
            int scannedItems = 5;
            int totalItems = 15;

            List<ItemHistory> ih = new List<ItemHistory>();

            ih.Add(new ItemHistory
            {
               PendingItems = pendingItems, 
               ScannedItems = scannedItems, 
               TotalItems = totalItems
            });

以上工作。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    您没有正确使用对象初始化程序。 试试这个(未测试):

    int totalItems = Convert.ToInt32(lblItemsScanned.Text);
    int scannedItems = Convert.ToInt32(lblItemsScanned.Text);
    
    int pendingItems = totalItems - scannedItems;
    List<ItemHistory> ih = new List<ItemHistory>();
    ih.Add(new ItemHistory
    {TotalItems = totalItems, ScannedItems = scannedItems , PendingItems = pendingItems });
    gvrecap.DataSource = ih;
    gvrecap.DataBind();
    

    我建议在你的模型中使用属性而不是变量来达到这个目的:

    public class ItemHistory
    {
        public int TotalItems {get;set;}
        public int ScannedItems {get;set;}
        public int PendingItems {get;set;}
    }
    

    【讨论】:

      猜你喜欢
      • 2016-03-12
      • 2013-03-23
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 2015-11-14
      • 2023-01-19
      相关资源
      最近更新 更多