代码之家  ›  专栏  ›  技术社区  ›  SidC

ASP。声明性数据绑定后,UpdatePanel内的NET Gridview不可见

  •  0
  • SidC  · 技术社区  · 6 年前

    我创建了一个页面,其中有一个下拉列表,用于选择一项研究。然后使用StudyID从存储过程返回结果,我尝试将结果数据绑定到gridview。但是,gridview不会在页面加载时呈现。所有控件都封装在AJAX控件工具包UpdatePanel中。

    下面是我为从存储过程中获得结果而编写的内容:

    public void RunResponses(int iStudyID)
    {
        DataTable dt = new DataTable();
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQL"].ConnectionString);
    
        iStudyID = Convert.ToInt32(
            string.IsNullOrWhiteSpace(ddlStudies.SelectedValue) ? null : ddlStudies.SelectedValue);
    
        try
        {
            using (conn)
            {
                SqlCommand command = new SqlCommand();
                command.Connection = conn;
                command.CommandText = "spGetAnalysisReport";
                command.CommandType = CommandType.StoredProcedure;
    
                SqlParameter param = new SqlParameter();
                param.ParameterName = "@StudyID";
                param.SqlDbType = SqlDbType.Int;
                param.Direction = ParameterDirection.Input;
                param.Value = iStudyID;
    
                command.Parameters.Add(param);
    
                SqlDataAdapter adapter = new SqlDataAdapter(command.CommandText, conn);
                DataSet ds = new DataSet();
    
                conn.Open();
                if (dt != null && dt.Rows.Count > 0)
                {
                    foreach (DataRow row in dt.Rows)
                    {
                        adapter.Fill(ds);
                        dt = ds.Tables["Responses"];
                        return;
                    }
    
                    gvStudyResponseData.DataSource = dt;
                    gvStudyResponseData.DataBind();
                }
                else
                {
                    gvStudyResponseData = null;
                    gvStudyResponseData.DataBind();
                }
            }
        }
        catch (Exception e)
        {
            Debug.WriteLine(e.ToString());
    
        }
        finally
        {
            conn.Close();
            dt.Dispose();
        }
    }
    

    我的Page\u加载如下:

    protected void Page_Load(object sender, EventArgs e)
    {
        int iUserID = 0;
    
        if (Session["UserID"] == null)
        {
            Response.Redirect("Default.aspx");
        }
        iUserID = Convert.ToInt32(Session["UserID"]);
        int iRole = 0;
        iRole = Convert.ToInt32(Session["RoleID"]);
    
        int iStudyID = Convert.ToInt32(string.IsNullOrWhiteSpace(ddlStudies.SelectedValue) ? null : ddlStudies.SelectedValue);
    
        if (!Page.IsPostBack)
        {
            DataTable dt = new DataTable();
            using (PROTOTYPING db = new PROTOTYPING(ConfigurationManager.ConnectionStrings["SQL"].ConnectionString))
            {
                var query =
                (from d in db.Studies
                    where d.StudyStatus == 0 //Closed...
                    orderby d.StudyName
                    select new
                    {
                        d.StudyName,
                        d.StudyID,
                    });
                if (dt != null && dt.Rows.Count > 0)
                {
                    foreach (DataRow row in dt.Rows)
                    {
                        ddlStudies.Items.Add(new ListItem(row["StudyID"].ToString(), row["StudyName"].ToString()));
                    }
                }
    
                ddlStudies.DataSource = query;
                ddlStudies.DataBind();
            }
    
            GetResponses(iStudyID, ddlStudies);
            RunResponses(iStudyID);
        }
    }
    

    我的页面布局如下:

    <asp:UpdatePanel ID="UpdatePanelPromo" runat="server">
        <ContentTemplate>
            <div style="position: fixed; left: 50%; height: 40px; width: 150px; z-index: 10000;">
                <asp:UpdateProgress ID="UpdateProgressPromo" runat="server" DisplayAfter="1" AssociatedUpdatePanelID="UpdatePanelPromo">
                    <ProgressTemplate>
                        <table style="border: medium solid #000080; width: 100%; background-color: white;">
                            <tr>
                                <td align="right" style="width: 12px;">
                                    <img src="Images/indicator_big.gif" alt="" />
                                </td>
                                <td><span style="color: #fff"><span style="font-size: 8pt; color: #0000cc; font-family: Verdana"><strong style="font-family: arial, Helvetica, sans-serif; font-size: 10pt; color: navy; font-weight: bold">processing  <span class="">....</span> </strong></span></span></td>
                            </tr>
                        </table>
                    </ProgressTemplate>
                </asp:UpdateProgress>
            </div>
            <div id="Studies" class="col-md-3" style="padding-top: 15px;">
                <div class="row">
                    <asp:Label runat="server" ID="lblSelectStudy" Text="Please Select A Closed Study to Analyze:"/>
                    <asp:DropDownList id="ddlStudies" runat="server" DataValueField="StudyID" DataTextField="StudyName">
    
                    </asp:DropDownList>
    
                </div>
                <div class="row">
                    <asp:Label runat="server" ID="lblSelectedStat" Text="Please Select An Analysis to Run on the Study Selected Above:"/><br/>
                    <asp:ListBox id="lbStatsToRun" runat="server" AutoPostBack="True">
    
                        <asp:ListItem>Regression Peak</asp:ListItem>
    
                    </asp:ListBox>
    
                </div>
                <div class ="row">
                    <asp:Button runat="server" id="btnRunStats" Text="Run Selected Analysis"/>
                </div>
                <div class="row">
                    <asp:Label runat="server" id="lblError"/>
                    <asp:Label runat="server" id="lblResult" Text="Result:"/>
    
                </div>
                <div class="row">
                    <asp:GridView runat="server" id="gvStudyResponseData" AutoGenerateData="True" EnableViewState="True">
                        <Columns>
    
                        </Columns>
                    </asp:GridView>
                </div>
            </div>
        </ContentTemplate>     
    </asp:UpdatePanel>
    

    如何确保在页面加载时呈现gridview?

    1 回复  |  直到 6 年前
        1
  •  2
  •   wazz    6 年前

    在对数据/sp执行任何操作之前,您都会遇到以下问题:

    if (dt != null && dt.Rows.Count > 0)
    

    此时的行计数将始终为0,并且块将不会运行。