1

2 つのテキスト ボックスを含むリピーター コントロールがありItemTemplateます。Repeater をループして、データベースにデータを挿入します。問題は、最初の TextBox だけが挿入されることです。

メソッドの List の最初の TextBox をバインドしますPageLoad

<asp:Repeater ID="questionRepeater" ViewStateMode="Enabled" runat="server">
    <ItemTemplate>
        <tr class="">
            <td>
                <div class="control-group">
                    <label class="control-label">Queston  : </label>

                    <div class="controls">
                        <asp:TextBox runat="server" ID="txtQ" Text='<%#Eval("Question") %>' ReadOnly="true" CssClass="span8">
                        </asp:TextBox>
                    </div>
                </div>
            </td>
        </tr>
        <tr class="info">
            <td>
                <div class="control-group">
                    <label class="control-label">Answer : </label>
                    <div class="controls">
                        <asp:TextBox runat="server" ID="txtAns"
                            Height="150" TextMode="MultiLine" CssClass="span8"></asp:TextBox>

                    </div>
                </div>
            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>

私のコードビハインド:

protected void btnSave_Click(object sender, EventArgs e)
{
    Sessions session = new Sessions();
    SessionQuestion sessionQuestions = new SessionQuestion();

    session.ClientId = id;
    session.DateTime = DateTime.Now;
    session.Report = txtReport.Text;
    session.Notes = string.Empty;
    session.IsActive = IsActive.Active;

    int sessionId = SessionBLL.Insert(session);

    foreach (Control item in questionRepeater.Items)
    {
        sessionQuestions.SessionId = sessionId;


        TextBox txtQ = (TextBox)item.FindControl("txtQ");
        sessionQuestions.Answer = "";
        sessionQuestions.Question = txtQ.Text;

        var txtAns = (TextBox)item.FindControl("txtAns") as TextBox;
        if (txtAns != null)
        {
            sessionQuestions.Answer = "";
            sessionQuestions.Answer = txtAns.Text; 
        }


        Thread.Sleep(150);
        if (txtAns != null && txtQ.Text != null)
        {
            SessionQuestionBLL.Insert(sessionQuestions);
        }
    }

    string message = "";

    Response.Redirect("/Sessions/Sessions.aspx?message=" + message);
}
4

1 に答える 1

1

おそらく、リピーターのデータバインディングを Page_Load に含めていないためです。

If (!IsPostBack)
{
    // Databind your repeater
}

また、リピーターを反復処理する場合は、以下に示すように、タイプ item & alternative の項目を反復処理することをお勧めします

foreach (RepeaterItem item in questionRepeater.Items)
{
    if (item.ItemType == ListItemType.Item || 
        item.ItemType == ListItemType.AlternatingItem)
    {
    }
}
于 2013-08-25T14:10:12.593 に答える