2017-04-07 182 views
2

我在做逗号分隔后检索一串字符串。接下来我想将它绑定到一个gridview。但是,它抛出一个错误:如何将列表项绑定到gridview

A field or property with the name _barcodes was not found on the selected data source.

下面是代码:

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

A field or property with the name _barcodes was not found on the selected data source.

你要绑定的字符串作为数据源到GridView控件,而不是像收集的List有一个名为_barcodes列或财产DataTable

您有一个列表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(); 
+0

你救了我的一天...非常感谢 – Arka

+0

欢迎你,不胜意谢。 – Adil

0

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

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

DataField必须匹配类中的属性。

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

<asp:BoundField DataField="myBarcode"