这已被多次询问,但我似乎无法找到直接答案。
使用C#,我使用数据表来填充gridview。我的数据表的第一行包含表头,所以我遍历该行并填充gridview标题行。但是现在我需要摆脱表格中的第一行(标题行)。我看了一遍,所有消息来源都同意正确的语法是:
strSQL = "SELECT * FROM [Station ID Request$]";
OleDbDataAdapter adaBatch = new OleDbDataAdapter(strSQL, strConnExcel);
DataTable dtBatch = new DataTable();
adaBatch.Fill(dtBatch);
gv_stations.DataSource = dtBatch;
gv_stations.DataBind();
// Fill gridview headers with first row of data (spreadsheet headers)
int i = 0;
foreach (DataColumn col in dtBatch.Columns)
{
gv_stations.HeaderRow.Cells[i].Text = dtBatch.Rows[0][i].ToString();
i++;
}
// Remove the first line of the gridview (contains header info)
gv_stations.DeleteRow(0);
一切正常但最后一行,这给了我这个错误:
System.Web.HttpException (0x80004005): The GridView 'gv_stations' fired
event RowDeleting which wasn't handled. at
System.Web.UI.WebControls.GridView.OnRowDeleting(GridViewDeleteEventArgs e)
at System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow row, Int32
rowIndex) at System.Web.UI.WebControls.GridView.DeleteRow(Int32 rowIndex)
我尝试过的每一种资源都说最后一行应该没问题。谁能告诉我为什么会收到这个错误?
编辑:这是我的gridview对象,按要求。
<asp:GridView ID="gv_stations" runat="server"
AutoGenerateColumns="True"
CssClass="c_gvv c_gvv_stations_results"
style="white-space:nowrap;">
</asp:GridView>
答案 0 :(得分:2)
您正试图从GridView
删除一行,而应将其从DataTable
中删除。使用此行:
dtBatch.Rows[0].Delete();
而不是:
gv_stations.DeleteRow(0);
您也可以简单地循环:
for(int i = 0; i < dtBatch.Columns.Count; i++)
gv_stations.HeaderRow.Cells[i].Text = dtBatch.Rows[0][i].ToString();
完整代码:
...
//Fill gridview headers with first row of data (spreadsheet headers)
for(int i = 0; i < dtBatch.Columns.Count; i++)
gv_stations.HeaderRow.Cells[i].Text = dtBatch.Rows[0][i].ToString();
//Remove the first line of the gridview (contains header info)
dtBatch.Rows[0].Delete();
//now do the bindings
gv_stations.DataSource = dtBatch;
gv_stations.DataBind();
答案 1 :(得分:2)
通过阅读你的评论到其他答案我有点困惑你说的问题是什么。是否只是绑定到gridview,数据表(标题)中的第一行显示为gridview中的标题行和第一行数据?
如果您不想首先检索它的标题行,然后通过foreach循环将所有标题添加到其中,那么看起来很奇怪,然后尝试删除它。
如果您不希望首先选择标题行,您可以修改连接字符串(可能是strConnExcel?)以包含“HDR = No”,这将阻止它首先返回第一行
但是,如果您想要标题行,则使用“HDR = Yes”并简单地绑定到gridview。它将知道标题行是什么。看看你正在做什么虽然看起来你试图添加标题行然后删除它!?
答案 2 :(得分:0)
您正在将GridView绑定到DataSource:
gv_stations.DataSource = dtBatch; gv_stations.DataBind();
从数据源中删除它,然后数据绑定,或数据绑定并从gridview中删除它而不进行重新数据绑定。
或者如果你想把它保留在那里,你可以让它不可见:
gv_stations.rows [0]。可见=假