Gridview внутри Datalist ASP.NET - PullRequest
       12

Gridview внутри Datalist ASP.NET

1 голос
/ 18 января 2012

Я пытаюсь поместить сетку вида asp в список данных asp. Для каждого элемента в списке данных я хотел бы получить определенные значения из другой таблицы базы данных.

Я написал следующий код, но просмотр сетки возвращает не данные (могу подтвердить, что в базе данных есть записи, и хранимая процедура верна). Datalist asp работает нормально.

Что я делаю не так, что не заполняет сетку?

<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>

А вот код позади.

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));
}

1 Ответ

3 голосов
/ 18 января 2012

Вы создали пустую таблицу данных как DataSource для своего GridView.

Заменить

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

с этим

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