【问题标题】:How clear GridView in asp.net?asp.net中的GridView如何清晰?
【发布时间】:2014-07-27 02:35:33
【问题描述】:

我在 asp.net 中创建一个网页,并在一个模块中选择了一个带有 FileUpLoad 的 Excel 存档,然后单击一个按钮导入。到目前为止我很好。但是在我想要选择其他 Excel 存档并单击按钮导入的那一刻,不要清除 GridView 并显示错误。我尝试这样做是因为我在其他类似的问题中看到。

用这个我加载网格

Conn = string.Format(Conn, DireccionArchivo, MostrarHDR);
OleDbConnection ConnExcel = new OleDbConnection(Conn);
OleDbCommand CmdExcel = new OleDbCommand();
OleDbDataAdapter Oda = new OleDbDataAdapter();
DataTable Dt = new DataTable();
CmdExcel.Connection = ConnExcel;

ConnExcel.Open();
CmdExcel.CommandText = "SELECT * From ["Page1$"]";
Oda.SelectCommand = CmdExcel;
Oda.Fill(Dt);
ConnExcel.Close();

grdResultados.Caption =  Path.GetFileName(DireccionArchivo);
grdResultados.DataSource = Dt;
grdResultados.DataBind();

有了这个,我想清除 GridView 和最后一次调用新的加载 GridView 的方法

DataTable ds = new DataTable();
ds = null;
grdResultados.DataSource = ds;
grdResultados.DataBind();

第二次调用时出现的错误是grdResultados.DataBind();

【问题讨论】:

  • 错误信息是什么?
  • 在所选数据源中找不到名为“名称”的字段或属性。此错误的可能原因可能如下: 网格列名称拼写错误或不区分大小写;将错误或未正确初始化的数据源分配给网格。

标签: c# asp.net excel gridview


【解决方案1】:

试试这个

grdResultados.DataSource = null;

grdResultados.Rows.Clear();

然后重新绑定gridview

【讨论】:

  • 我不和那些人一起工作,也不和grdResultados.Columns.Clear一起工作
  • 您遇到了什么错误?如果问题是gridview清除解决方案是这样的
  • 这是错误:在所选数据源中找不到名为“名称”的字段或属性。此错误的可能原因可能如下: 网格列名称拼写错误或不区分大小写;将错误或未正确初始化的数据源分配给网格。
  • 您的数据源有 Name 属性吗?
  • 是的,我有,给我看的错误是:grdResultados.DataBind();
【解决方案2】:

只使用空值:

grdResultados.DataSource = null;
grdResultados.DataBind();

【讨论】:

  • 听起来你甚至在空绑定之前就收到了错误?匹配数据源和网格视图上的名称字段
  • 当我第二次调用加载gridview的方法时出现错误:grdResultados.DataBind();
  • 这对我很有效。我发现的其他解决方案说使用 'Gridview.Rows.Clear(); Gridview.Refresh();'但这必须被弃用,因为我什至没有 Clear 选项。将数据源设置为 null 然后重新绑定将清除网格中的所有内容。正如其他人提到的,重置数据源并再次绑定以获取其他内容。
  • 我在选择另一个页面时收到此消息:“GridView 'GridView1' 触发了未处理的事件 PageIndexChanging。”
【解决方案3】:

只用你的列名创建一个空数据表并重新绑定

【讨论】:

  • 我有错误,因为我没有清除列的名称。这个:grdResultados.DataSource = null不要清除列的名称
【解决方案4】:

我现在解决了这个问题,而不是用清除 GridView

DataTable ds = new DataTable();
ds = null;
grdResultados.DataSource = ds;
grdResultados.DataBind();

这清除了 GridView 但不清除列名,这是错误,还必须清除列名。要删除列:

for (int i = 0; grdResultados.Columns.Count > i; )
{
    grdResultados.Columns.RemoveAt(i);
}

并且在加载 GridView 的方法中必须使用此属性自动生成列:

grdResultados.AutoGenerateColumns = true;

我留下这个以防其他人有同样的问题

【讨论】:

  • 您不需要遍历列。相反,只需执行 grdResultados.Columns.Clear();命令。
【解决方案5】:
int gvHasRows = grdResultados.Rows.Count;
if (gvHasRows > 0)
{
    grdResultados.Columns.Clear();
    grdResultados.DataBind();
}

在尝试清除之前,首先检查 Gridview 中是否有数据。 行没有清除功能。

【讨论】:

    【解决方案6】:

    如果您使用 Session 清除会话示例:

    DataTable ds = new DataTable();
    ds = null;
    GV.DataSource = ds;
    GV.DataBind();
    
    for (int i = 0; GV.Columns.Count > i; )
    {
        GV.Columns.RemoveAt(i);
    }
    
    ViewState["CurrentData"] = null;
    

    【讨论】:

    • 在选择页面时尝试了这个并获得了这个结果:“GridView 'GridView1' 触发了未处理的事件 PageIndexChanging。”
    【解决方案7】:

    你可以这样做:

    GridView1.SelectedIndex = -1;
    

    【讨论】:

      【解决方案8】:

      如果数据集 IsNot Nothing AndAlso dataset.Tables.Count > 0 AndAlso dataset.Tables(0).Rows.Count > 0 Then grid.DataSource = 数据集 grid.DataBind() 别的 grid.DataSource = 没有 grid.DataBind()

      【讨论】:

      • 欢迎来到 SO!请阅读游览tourHow to Answer 一个问题。这个问题是在 6 多年前提出的,并且有一个公认的答案。请在此处查看一些未回答的问题....unanswered 或在此处搜索与您的特定技能相关的标签tag
      【解决方案9】:

      如果您使用的是 XAML 定义的网格,请改用它:

      GridView1.Children.Clear();
      GridView1.RowDefinitions.Clear();
      GridView1.ColumnDefinitions.Clear();
      

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 2022-01-05
        • 2017-05-15
        • 2020-11-23
        • 2021-01-17
        相关资源
        最近更新 更多