0
Excelシートからデータをインポートしていますが、1つのシートでは動作しますが、同じ列と正しいデータでは動作しません。多くのファイルで動作しますが、ほとんど動作しません。私はサンプルを添付し、以下にエラーをコードで記述しています。バインド時に、エラーをスローします。なぜDataBinding: 'System.Data.DataRowView'に 'xxx'という名前のプロパティが含まれていないのですか?
取り組んでいるシート:
とエラーの原因となっているシート:
エラー:
データバインディング:「System.Data .DataRowView 'に' Amount 'という名前のプロパティが含まれていません。
コード:
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>
動作していないシートには、列名の一部としてスペースがありますか(F2を編集するには)? – mjwills
カラム名に先頭または末尾の空白があるかどうか確認することができます。数値 –
@mjwills:いいえ、スペースなし、 – Stacky