C#,从网格视图元素中删除第一行

本文关键字:一行 删除 网格 视图 元素 | 更新日期: 2023-09-27 18:31:14

这个问题已经被问了很多次,但我似乎找不到直接的答案。

使用

C#,我使用数据表来填充网格视图。数据表的第一行包含表标题,因此我循环遍历该行并填充网格视图标题行。但是现在我需要摆脱表中的第一行(标题行)。我已经看遍了所有内容,所有来源都同意正确的语法是:

   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) 

我尝试过的每个资源都说最后一行应该没问题。谁能说出为什么我会收到这个错误?

编辑:这是我的网格视图对象,根据要求。

<asp:GridView ID="gv_stations" runat="server"
    AutoGenerateColumns="True"    
    CssClass="c_gvv c_gvv_stations_results"
    style="white-space:nowrap;">
</asp:GridView>

C#,从网格视图元素中删除第一行

通读了您对其他答案的评论后,我对你所说的问题是什么有点困惑。是不是只是绑定到网格视图,数据表(标题)中的第一行同时显示为网格视图中的标题行和第一行数据?

如果您不想要标题行,则首先检索它,然后经历使用foreach循环将其全部添加的麻烦,然后尝试将其删除,这似乎很奇怪。

如果您不希望首先选择标题行,则可以修改连接字符串(大概是strConnExcel?)以包含"HDR=No",这将阻止它首先恢复第一行。

但是,如果需要标题行,请使用"HDR=Yes"并简单地绑定到网格视图。它将知道标题行是什么。看看你在做什么,虽然看起来你试图添加标题行然后删除它!?

您正在尝试从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();

您要将 GridView 绑定到数据源:

gv_stations。数据源 = dtBatch; gv_stations。数据绑定();

要么

从数据源中删除它,然后进行数据绑定,要么数据绑定并从网格视图中删除它而不重新进行数据绑定。

或者如果你想把它留在那里,你可以让它不可见:

gv_stations.rows[0].visible=false