简体   繁体   English

数据列表ASP.NET中的Gridview

[英]Gridview inside Datalist ASP.NET

I am trying to place an asp gridview inside an asp datalist. 我试图将一个asp gridview放在一个asp数据列表中。 For each item in the datalist I would like certain values from another database table to be returned. 对于数据列表中的每个项目,我希望返回另一个数据库表中的某些值。

I have written the following code, but the gridview returns not data (I can confirm there is records in the database and the stored procedure is correct). 我已经编写了以下代码,但是gridview不返回数据(我可以确认数据库中有记录并且存储过程正确)。 The asp datalist is working fine. asp数据列表工作正常。

What am I doing wrong that is not populating the gridview? 我做错了什么,没有填充gridview?

<asp:DataList runat="server" id="listResponses" DataKeyField="QuestionID" CssClass="confirm" OnItemDataBound="listResponses_ItemDataBound">
    <ItemTemplate>
    <h3 class="confirm new">Question <asp:Label ID="lblaOrder" runat="server" Text='<%# Container.ItemIndex  + 1 %>'></asp:Label></h3>
    <div class="confirm_question">
        <asp:Label ID="lblOrder" runat="server" Text='<%# Container.ItemIndex  + 1 %>'></asp:Label>
        <p class="confirm"><%# DataBinder.Eval(Container.DataItem, "QuestionText") %></p>
    </div> <!-- end confirm_question -->
    <asp:GridView runat="server" ID="gridResponses" DataKeyNames="QuestionID"">
        <Columns>
            <asp:BoundField DataField="AnswerTitle" HeaderText="ID" HeaderStyle-Width="80px" ItemStyle-CssClass="bo"></asp:BoundField>
            <asp:BoundField DataField="Responses" HeaderText="Response Count" HeaderStyle-Width="150px" />
         </Columns>
      </asp:GridView>   
  </ItemTemplate> 
</asp:DataList>

And here is the code behind. 这是背后的代码。

public partial class questionnaire_responses : System.Web.UI.Page
{
    OsqarSQL GetData;
    DataTable DT;
    private string _productConnectionString;
    private SqlConnection _productConn;      

    protected void Page_Load(object sender, EventArgs e) 
    { 
        string questionnaireId = Session["qID"].ToString();
        int qid = Convert.ToInt32(questionnaireId);
        GetData = new OsqarSQL();
        string name = GetData.GetQuestionnaireName(qid);
        lblQuestionnaireName.Text = name;
        if (!IsPostBack) 
        { 
            DT = GetData.GetQuestionNameDataList(qid);
            listResponses.DataSource = DT;
            listResponses.DataBind();
        } 
    }

    private void BindGrid(GridView GridView, int questionId) 
    {
        DataTable dt = new DataTable(); 
        GetData.GetAnswerTitle(questionId);
        GridView.DataSource = dt; 
        GridView.DataBind();
    }

    protected void listResponses_ItemDataBound(object sender, DataListItemEventArgs e) 
    { 
        GridView gridResponses=(GridView)e.Item.FindControl("gridResponses"); 
        BindGrid(gridResponses, (int)listResponses.DataKeys[e.Item.ItemIndex]); 
    }

}

//Method from the data access class
public DataTable GetAnswerTitle(int QuestionId)
{
    string returnValue = string.Empty;
    SqlCommand myCommand = new SqlCommand("GetAnswer", _productConn);
    myCommand.CommandType = CommandType.StoredProcedure;
    ,yCommand.Parameters.Add(new SqlParameter("@QUESTION_ID", SqlDbType.Int));
    myCommand.Parameters[0].Value = QuestionId;
    return createDataTable(getData(myCommand));
}

You've created an empty DataTable as DataSource for your GridView. 您已经为GridView创建了一个空的DataTable作为DataSource

Replace 更换

DataTable dt = new DataTable(); 
GetData.GetAnswerTitle(questionId);
GridView.DataSource = dt; 

with this 有了这个

DataTable dt = GetData.GetAnswerTitle(questionId);
GridView.DataSource = dt; 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM