【问题标题】:Why does the GridView disappear after a button click为什么单击按钮后GridView会消失
【发布时间】:2015-09-09 21:10:01
【问题描述】:
<asp:UpdatePanel ID="upExec" runat="server" ClientIDMode="Static" UpdateMode="Conditional">
    <ContentTemplate>
        <button type="button" runat="server" id="btnExec" onserverclick="btnExec_Click" class="btnAll btnExec">Execute SQL Job</button>
        <asp:Label ID="lblEMsg" runat="server" ClientIDMode="Static" Text=""></asp:Label>
    </ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="upGV" runat="server" ClientIDMode="Static" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:GridView EmptyDataText="No Provider Exists" ID="gvData" runat="server" ClientIDMode="Static" AutoGenerateColumns="false">
            <Columns>
                <asp:BoundField HeaderStyle-Width="5%" DataField="Name" HeaderText="Name" />
                <asp:BoundField HeaderStyle-Width="5%" DataField="ID" HeaderText="ID" />
            </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

if (!Page.IsPostBack)
{
    ViewState["sortOrder"] = "Asc";
    ViewState["sortExp"] = "Due Date";
    ShowGridView("Name", "Asc");
}

public void ShowGridView(string sortExp, string sortDir)
{
    using (SqlConnection sc = new SqlConnection(gloString))
    {
        try
        {
            sc.Open();
            SqlDataAdapter sda = new SqlDataAdapter(strQuery, sc);

            DataSet ds = new DataSet();
            sda.Fill(ds);

            DataView dv = new DataView();
            dv = ds.Tables[0].DefaultView;

            gvData.DataSource = dv;
            gvData.DataBind();
        }
        catch (SqlException)
        {
        }
        finally
        {
            sc.Close();
        }
    }
    upGV.Update();
}

public void btnExec_Click(object sender, EventArgs e)
{
    using (SqlConnection sc = new SqlConnection(gloString))
    {
        try
        {
            sc.Open();
            using (SqlCommand scd = new SqlCommand())
            {
                scd.CommandText = "MySP";
                scd.CommandType = CommandType.StoredProcedure;
                scd.Connection = sc;

                scd.ExecuteNonQuery();
            }
        }
        catch (SqlException)
        {
        }
        finally
        {
            sc.Close();
        }
    }

    using (SqlConnection sc = new SqlConnection(floString))
    {
        try
        {
            sc.Open();
            SqlCommand scd = new SqlCommand();
            scd.CommandType = CommandType.StoredProcedure;
            scd.Connection = sc;
            scd.CommandText = "msdb.dbo.sp_start_job";
            scd.Parameters.AddWithValue("@job_name", "JobName");

            using (scd)
            {
                scd.ExecuteNonQuery();
                ShowGridView("Name", "Asc");
            }
        }
        catch (SqlException)
        {
        }
        finally
        {
            sc.Close();
        }
    }

    upExec.Update();
}

当页面第一次加载时,我可以看到 GridView。当我单击btnExec 时,GridView 消失并显示“不存在提供程序”。当我检查页面的来源时,数据仍然存在。

如何解决它,以便在单击按钮时执行存储过程并使用新数据重新加载 GridView。

【问题讨论】:

  • 你还有这个问题吗?
  • 是的,出于某种原因,我似乎无法弄清楚为什么。

标签: c# asp.net gridview


【解决方案1】:

看起来您应该将 btnExec_Click() 方法中对 ShowGridView() 的调用移到外部“使用”语句之外,就在调用 upExec.Update() 之前。

【讨论】:

  • 还是一样的:/我不知道为什么它一直说没有提供者存在。如果我调试它工作正常但没有调试它不会。有什么想法吗?
  • 我删除了if (!Page.IsPostBack) 部分,让 GridView 始终在页面加载时填充,它工作正常。很奇怪,因此 Click 方法中的函数调用由于某种原因无法正常工作。 ://
  • 您是否尝试过在 Visual Studio 中调试和设置断点以查看是否正在调用 btn_click?另外,是什么行导致消息“没有提供者存在”??
  • 当我调试它工作正常但是当我点击继续按钮执行而不调试时我得到了错误。
  • 我明白了。那么无论如何您可以使用存储过程而不是作业将数据复制到临时表并导出它?因为一个存储过程会在整个事情完成后返回,然后当您选择将其绑定到数据网格时,您可以确定该表已准备就绪。
【解决方案2】:

在我的情况下,我必须将此属性添加到包装我的 GridView 的面板中,以使其保持可见和工作,每次我单击一行以选择它时,它都会不断消失:

&lt;asp:Panel EnableViewState="True"&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多