我正在将excel记录加载到数据表中。当此表绑定到gridview时,我会看到另一列“F1”以及另一个包含空数据的行。我该如何防止这种情况。
例如,Excel工作表包含以下记录:
Name L1 L2
abc 2 4
def 3 3
当绑定到网格视图时,我将其视为附加列(F1)和行(3)
S.No Name L1 L2 F1
1 abc 2 4
2 def 3 3
3
ASPX:
<asp:GridView ID="gv" runat="server" AutoGenerateColumns="true">
<columns>
<asp:TemplateField HeaderText="S.No">
<ItemTemplate>
<%#Container.DataItemIndex+1%>
</ItemTemplate>
</asp:TemplateField>
</columns>
</asp:GridView>
C#
DataTable dtExcel = new DataTable();
DataTable dt = new DataTable();
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
dtExcel = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
string qry = "select * from [Sheet1$]";
OleDbDataAdapter da = new OleDbDataAdapter(qry,conn);
da.Fill(dt);
conn.Close();
gv.DataSource=dt;
gv.DataBind();
只是删除最后一栏是一个好方法。为什么它首先出现。 另一种选择是删除DataTable中名为“F1”的列,但如果它也可能是L1,L2等原始列之一的名称,那该怎么办。
答案 0 :(得分:1)
只需使用您需要的列更新select
语句,并确保它们在Excel文件中可用:
string qry = "select [L1], [L2] from [Sheet1$]";
动态查询更新
//if you have muliple condition then use StringBuilder class
//for making column list
string strColumns=string.Empty;
if(CoditionForL1)
{
strColumns =strColumns+ "[L1] ,";
}
if (ConditionForL2)
{
strColumns = strColumns + "[L2],";
}
string qry = "select "+(strColumns= strColumns.TrimEnd(','))+" from [Sheet1$]";