簡體   English   中英

將數據從中繼器插入數據庫

[英]insert data from repeater to the database

我的問題已經有很多答案,但是問題是那里有很多糟糕的答案,我必須要有天才才能弄清楚什么答案將對我有所幫助。 讓我們說清楚。 我的問題很簡單,我有一個包含兩個textboxesrepeater

txtQuestion
txtAnswer

我有一個綁定方法

   List<SessionQuestion> questions = new List<SessionQuestion>();

包含我的問題以將其綁定到txtQuestion

大約17個問題(Bazinga!)。 所以我想在txtAnswer回答問題,然后按一下按鈕將其保存到數據庫中。 我使用multi-tier體系結構,所以我想要最重要的方法來保存17個textbox的數據,以將其推入表中。 我的桌子有這種結構。

[SessionQuestionId]  [SessionId]  [Question]  [Answer].

我的代碼段:

<table class="table responsive">
                    <tbody>
                        <asp:Repeater ID="questionRepeater" runat="server">
                            <ItemTemplate>
                                   <tr class="">
                            <td>
                                <div class="control-group">
                                    <label class="control-label">Queston <asp:Literal id="liteQuestionNum" runat="server" ></asp:Literal> : </label>

                                    <div class="controls">
                                        <asp:TextBox runat="server" ID="txtQ" Text='<%#Eval("Question") %>' ReadOnly="true" CssClass="span8">
                                        </asp:TextBox>
                                    </div>
                                </div>

                                <hr />
                                <div class="control-group">
                                    <label class="control-label">Answer <asp:Literal id="liteAnserNum" runat="server" ></asp:Literal> : </label>
                                    <div class="controls">

                                        <asp:TextBox ID="txtAns" runat="server" CssClass="span8" TextMode="MultiLine">

                                        </asp:TextBox>
                                    </div>
                                </div>
                            </td>
                        </tr>
                            </ItemTemplate>
                        </asp:Repeater>
                    </tbody>
                </table>

代碼段后面的代碼:

    private void BindRepeater()
{
    List<SessionQuestion> questions = new List<SessionQuestion>();
    questions.Add(new SessionQuestion { Question = "Question 1 etc.."});
    questions.Add(new SessionQuestion { Question = "Question 2 etc.."});
.
.
.
.
    questionRepeater.DataSource = questions;
    questionRepeater.DataBind();
}

protected void btnSave_Click(object sender, EventArgs e)
{

}

提前致謝。

您可以嘗試一下,我剛剛展示了從中繼器中獲取價值的方法,您可以根據需要進一步對其進行修改。

protected void btnSave_Click(object sender, EventArgs e)
{
    foreach (RepeaterItem item in questionRepeater.Items)
    {
        TextBox Qbox = item.FindControl("txtQ") as TextBox;
        TextBox Ansbox = item.FindControl("txtAns") as TextBox;
        string Question = Qbox.Text;
        string Answer =  Ansbox.Text;

        if (!string.IsNullOrEmpty(Answer))
        {
            //Perform your insert operation.
        }
    }
    //Bind Repeater again if required
}

沒有答案很漂亮,但是您可以走ajax路線,也可以按照本文詳細介紹如何響應來自中繼器的命令參數:

http://www.webcodeexpert.com/2013/04/how-to-bind-edit-update-and-delete-data.html#.Uhlq3VTD-t8

最好的選擇是使用jquery + PageMethods。 例如有一個這樣的班級

public class QuestionAnswer
{
string txtQuestion{get;set;}
string txtAnswer{get;set;}
}

在您的.cs代碼上,創建如下的PageMethods:

[WebMethod]
public static void SaveAnswers(QuestionAnswer[] answers)
{
    ....
}

更改您的.aspx,如下所示:

<table class="table responsive">
                    <tbody>
                        <asp:Repeater ID="questionRepeater" runat="server">
                            <ItemTemplate>
                                   <tr class="">
                            <td>
                                <div class="control-group">
                                    <label class="control-label">Queston <asp:Literal id="liteQuestionNum" runat="server" ></asp:Literal> : </label>

                                    <div class="controls">
                                        <asp:TextBox runat="server" ID="txtQ" Text='<%#Eval("Question") %>' ReadOnly="true" CssClass="span8 question">
                                        </asp:TextBox>
                                    </div>
                                </div>

                                <hr />
                                <div class="control-group">
                                    <label class="control-label">Answer <asp:Literal id="liteAnserNum" runat="server" ></asp:Literal> : </label>
                                    <div class="controls">

                                        <asp:TextBox ID="txtAns" runat="server" CssClass="span8 answer" TextMode="MultiLine">

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

    .....
don't forget to reference jquery
...
<script>
$('#<%=btnSave.ClientId%>').click(function(){
   var answers = [];
   $('.responsive tbody tr').each(function(){
     answers.push({
        txtQuestion:$('td .question').val(),
        txtAnswer:$('td .answer').val()
     });
   });

   PageMethods.SaveAnswers(answers);
   return false;
});
</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM