如何将列表项绑定到gridview

时间:2017-04-07 09:14:19

标签: c# asp.net gridview data-binding

我在做逗号分离后检索一堆字符串。接下来我想将它绑定到gridview。但是,它会引发错误:

  

在所选数据源上找不到名称为_barcodes的字段或属性。

以下是代码:

private void RetrieveScannedBarcodes()
////code to retrieve the barcodes
    foreach (var item in ScannedBarcodes)
    {
        _barcodes.AddRange(item.Split(','));
        foreach (var b in _barcodes)
        {
            gvScannedBarcodes.DataSource = b;
            gvScannedBarcodes.DataBind();
        }
    }

和gridview代码:

<asp:GridView ID="gvScannedBarcodes" runat="server" AllowSorting="true"
    AutoGenerateColumns="false" PagerSettings-Mode="NumericFirstLast" PageSize="25"
    Width="741px">
    <Columns>
        <asp:BoundField DataField="_barcodes" HeaderText="Barcodes" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="50" />
    </Columns>
</asp:GridView>

任何形式的帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:2)

  

在。上找不到名称为_barcodes的字段或属性   选定的数据来源。

您将字符串作为数据源绑定到GridView,而不是像DataTable List这样具有名为_barcodes的列或属性的集合。

您有一个包含逗号分隔条形码字符串的列表ScannedBarcodes,您可能希望该列表中的所有条形码都与GridView绑定。现在,您必须将ScannedBarcodes中的所有条形码添加到某个集合中,并将_barcodes作为列。

您可以使用Linq查询使用SelectManySelect获取所有条形码,并将结果放入具有列名_barcodes的匿名对象列表中。

gvScannedBarcodes.DataSource =  ScannedBarcodes.SelectMany(s=>s.Split(',')
                                .Select(b=>new {_barcodes = b}));
gvScannedBarcodes.DataBind();

为了便于理解,请参阅以下示例。

List<string> list = new List<string>(new string []{"1,2,3","4,5,6"});
gvScannedBarcodes.DataSource = list.SelectMany(l=>l.Split(',')
                               .Select(b=>new {_barcodes = b}));
gvScannedBarcodes.DataBind();

答案 1 :(得分:0)

您可以直接将List绑定到GridView。

gvScannedBarcodes.DataSource = ScannedBarcodes;
gvScannedBarcodes.DataBind();

DataField必须与Class中的属性匹配。

class Barcode
{
    public string myBarcode { get; set; }
}

<asp:BoundField DataField="myBarcode"