2017-09-18 1 views
0

Ich importiere Daten aus Excel-Blatt, aber es funktioniert für ein Blatt, aber nicht ein anderes mit den gleichen Spalten und korrekten Daten. Es funktioniert für viele Dateien, aber nicht wenige. Ich habe die Beispiele und den Fehler unten mit Code beigefügt. Bei der Bindung wird ein Fehler ausgegeben.Warum DataBinding: 'System.Data.DataRowView' enthält keine Eigenschaft mit dem Namen 'xxx'?

das Blatt, das arbeitet:

enter image description here

und das Blatt, das den Fehler verursacht:

enter image description here

Fehler:

Databinding: ‚System.Data .DataRowView 'enthält keine Eigenschaft mit dem Namen' Amount '.

Code:

private void ImportDataToGrid(string FilePath, string Extension, string isHDR) 
    { 
     string conStr = ""; 
     switch (Extension) 
     { 
      case ".xls": //Excel 97-03 
       conStr = ConfigurationManager.ConnectionStrings["Excel07ConString"].ConnectionString; 
       break; 
      case ".xlsx": //Excel 07 
       conStr = ConfigurationManager.ConnectionStrings["Excel07ConString"].ConnectionString; 
       break; 
     } 
     conStr = String.Format(conStr, FilePath, isHDR); 
     OleDbConnection connExcel = new OleDbConnection(conStr); 
     OleDbCommand cmdExcel = new OleDbCommand(); 
     OleDbDataAdapter oda = new OleDbDataAdapter(); 
     DataTable dt = new DataTable(); 
     cmdExcel.Connection = connExcel; 

     //Get the name of First Sheet 
     connExcel.Open(); 
     DataTable dtExcelSchema; 
     dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
     string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); 
     connExcel.Close(); 

     //Read Data from First Sheet 
     connExcel.Open(); 
     cmdExcel.CommandText = "SELECT * From [" + SheetName + "]"; 
     oda.SelectCommand = cmdExcel; 
     oda.Fill(dt); 
     connExcel.Close(); 
     DataColumn dc = new DataColumn("NITNo", typeof(string)); 
     dc.DefaultValue = txtNitNo.Text.ToString(); 
     dt.Columns.Add(dc); 

     dc = new DataColumn("WorkNo", typeof(string)); 
     dc.DefaultValue = txtWorkNo.Text.ToString(); 
     dt.Columns.Add(dc); 

     //Bind Data to GridView 
     gvBOQ.Caption = Path.GetFileName(FilePath); 
     gvBOQ.DataSource = dt; 
     gvBOQ.DataBind(); 
    } 

GV:

<asp:GridView ID="gvBOQ" runat="server" AutoGenerateColumns="false" EmptyDataText="No Data Found" 
    CssClass="table table-responsive table-bordered table-striped"> 
    <Columns> 
     <asp:TemplateField HeaderText="S.No"> 
      <ItemTemplate> 
       <%# Container.DataItemIndex+1 %> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="NIT No"> 
      <ItemTemplate> 
       <asp:Literal ID="liNITNo" runat="server" Text='<%#Eval("NITNo") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Work No"> 
      <ItemTemplate> 
       <asp:Literal ID="liWorkNo" runat="server" Text='<%#Eval("WorkNo") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Item Code"> 
      <ItemTemplate> 
       <asp:Literal ID="liItemCode" runat="server" Text='<%#Eval("ItemCode") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Item Description"> 
      <ItemTemplate> 
       <asp:Literal ID="liItemDesc" runat="server" Text='<%#Eval("DescriptionOfItem") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Quantity"> 
      <ItemTemplate> 
       <asp:Literal ID="liQuantity" runat="server" Text='<%#Eval("Quantity") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Unit"> 
      <ItemTemplate> 
       <asp:Literal ID="liUnit" runat="server" Text='<%#Eval("Unit") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Rate"> 
      <ItemTemplate> 
       <asp:Literal ID="liRate" runat="server" Text='<%#Eval("Rate") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Amount"> 
      <ItemTemplate> 
       <asp:Literal ID="liAmount" runat="server" Text='<%#Eval("Amount") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
+1

In dem Blatt, das nicht funktioniert, gibt es ein Leerzeichen als Teil des Spaltennamens (F2, um es zu bearbeiten)? – mjwills

+1

Sie möchten überprüfen, ob im Spaltennamen führende oder nachstehende Leerzeichen vorhanden sind. Betrag –

+0

@mjwills: nein bro, kein Leerzeichen, – Stacky

Antwort

1

In diesen Situationen wird das Problem in der Regel durch wobei ein Raum () in dem Spaltennamen verursacht.

Ich würde empfehlen, das zu überprüfen und alle Leerzeichen dort zu entfernen.

Verwandte Themen