0

ドキュメントを作成する Web アプリケーションを作成しています。ドキュメントには段落 (外側の繰り返し) とサブ段落 (内側の繰り返し) があります。私が探しているのは、既存のドキュメントに空白のサブパラグラフを追加する方法です。

私のマークアップ:

<asp:Repeater ID="ParagraphRepeater" runat="server" 
   OnItemDataBound="ParagraphRepeater_ItemDataBound" >
   <ItemTemplate>
       <asp:TextBox ID="ParagraphTitleTextBox" runat="server" Font-Bold="true" Width="300px" 
           Text='<%# Eval("ParagraphTitle") %>'></asp:TextBox>
       <br />
       <asp:TextBox ID="ParagraphTextTextBox" runat="server" TextMode="MultiLine" Wrap="true"
                        width="1100px" Height="50px" Text='<%# Eval("ParagraphText") %>'></asp:TextBox>
       <asp:Button ID="DeleteParagraphButton" runat="server" Text="Delete" OnClick="DeleteParagraphButton_Click" />
       <asp:Repeater ID="SubParagraphRepeater" runat="server" DataSourceID="SubParagraphSqlDataSource">
           <ItemTemplate>
               <div style="margin-left: 30px">
                   <asp:TextBox ID="SubParagraphTitleTextBox" runat="server" Font-Underline="true" Width="200px"
                                    Text='<%# Eval("SubParagraphTitle") %>'></asp:TextBox>
                   <br />
                   <asp:TextBox ID="SubParagraphTextTextBox" runat="server" TextMode="MultiLine" Wrap="true"
                                    Width="1050px" Height="50px" Text='<%# Eval("SubParagraphText") %>'></asp:TextBox>
                   <asp:Button ID="DeleteSubParagraphButton" runat="server" Text="Delete" 
                                    OnClick="DeleteSubParagraphButton_Click" />
                   <br />
               </div>
           </ItemTemplate>
       </asp:Repeater>
       <br />
       <br />
       <br />
   </ItemTemplate>

私のコード:

protected void MultiView1_ActiveViewChanged(object sender, EventArgs e)
{
    if (MultiView1.GetActiveView() == InputView) 
    {
        BuildParagraphDataTable();
        BuildSubParagraphDataTable();

        if (RevisionsDropDownList.SelectedValue == "0")
        {
            // User is creating a new document
            // Call method to create a datatable for the form row
            SetFormRow();

            // Call method to create a datatable for the paragraph row
            AddParagraph();

            DataTable dt = (DataTable)ViewState["ParagraphTable"];
            ParagraphRepeater.DataSource = dt;
            ParagraphRepeater.DataBind();

        }
        else
        {
            // User is opening an existing document
            // Get the formId and save it to ViewState
            int formId = Convert.ToInt32(RevisionsDropDownList.SelectedValue);
            ViewState["FormId"] = formId.ToString();

            // Bind the Paragraph repeater to its sqlDataSource
            ParagraphRepeater.DataSource = ParagraphSqlDataSource;
            ParagraphRepeater.DataBind();
        }
    }
}
protected void AddParagraph()
{
    int paragraphId;

    DataTable dt = (DataTable)ViewState["ParagraphTable"];
    DataRow dr = dt.NewRow();

    if (ViewState["ParagraphId"] != null)
        paragraphId = Convert.ToInt32(ViewState["ParagraphId"]);
    else
        paragraphId = 0;

    paragraphId--;

    int formId = Convert.ToInt32(ViewState["FormId"]);

    dr["ParagraphId"] = paragraphId;
    dr["FormId"] = formId;
    dr["ParagraphTitle"] = string.Empty;
    dr["ParagraphText"] = string.Empty;
    dr["CreatorId"] = string.Empty;
    dr["RevisorId"] = string.Empty;
    dt.Rows.Add(dr);

    ViewState["ParagraphTable"] = dt;
    ViewState["ParagraphId"] = paragraphId;

}
protected void AddSubParagraph()
{
    DataTable dt = (DataTable)ViewState["SubParagraphTable"];
    DataRow dr = dt.NewRow();

    int paragraphId = Convert.ToInt32(ViewState["ParagraphId"]);

    dr["ParagraphId"] = paragraphId;
    dr["SubParagraphTitle"] = string.Empty;
    dr["SubParagraphText"] = string.Empty;
    dr["CreatorId"] = string.Empty;
    dr["RevisorId"] = string.Empty;
    dt.Rows.Add(dr);

    ViewState["SubParagraphTable"] = dt;
}

protected void ParagraphRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        AddParagraph();
        DataTable parentDataTable = (DataTable)ViewState["ParagraphTable"];
        DataRow lastDTRow = parentDataTable.Rows[parentDataTable.Rows.Count - 1];

        int paragraphId = (int)ViewState["ParagraphId"];
        DataRowView thisParagraphRowView = (DataRowView)e.Item.DataItem;

        paragraphId = (int)thisParagraphRowView.Row["ParagraphId"];

        lastDTRow["ParagraphId"] = thisParagraphRowView.Row["ParagraphId"];
        lastDTRow["FormId"] = thisParagraphRowView.Row["FormId"];
        lastDTRow["ParagraphTitle"] = thisParagraphRowView.Row["ParagraphTitle"];
        lastDTRow["ParagraphText"] = thisParagraphRowView.Row["ParagraphText"];

        ViewState["ParagraphTable"] = parentDataTable;
        ViewState["ParagraphId"] = paragraphId.ToString();

        DataTable childDataTable;
        DataRowView thisSubParagraphRowView;

        Repeater childRepeater = (Repeater)e.Item.FindControl("SubParagraphRepeater");

        foreach (RepeaterItem item in childRepeater.Items)
        {
            if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
            {
                thisSubParagraphRowView = (DataRowView)item.DataItem;
                if (thisSubParagraphRowView != null)
                {
                    AddSubParagraph();
                    childDataTable = (DataTable)ViewState["SubParagraphTable"];
                    lastDTRow = childDataTable.Rows[childDataTable.Rows.Count - 1];

                    lastDTRow["ParagraphId"] = thisSubParagraphRowView.Row["ParagraphId"];
                    lastDTRow["SubParagraphTitle"] = thisSubParagraphRowView.Row["SubParagraphTitle"];
                    lastDTRow["SubParagraphText"] = thisSubParagraphRowView.Row["SubParagraphText"];

                    ViewState["SubParagraphTable"] = childDataTable;
                }
            }
        }
    }
}

ユーザーが既存のフォームを開くと、itemDataBound コードが段落とサブ段落のデータ テーブルに入力します。(これらのデータテーブルは、データベースの更新に使用されます。)

ユーザーが新しいフォームを作成すると、 setForm() および addParagraph() メソッドが呼び出されてフォーム ID が作成され、空白の段落が追加されます。空白のサブパラグラフは追加されません。ユーザーはボタンをクリックする必要があります。

データ モデルに関しては、フォームが 1 つあります (ユーザーが ddl から選択します)。フォームには 1 つから多くの段落を含めることができ、段落にはゼロから多くのサブ段落を含めることができます。

外側のリピーター (カーソルが現在配置されている段落、またはカーソルがサブ段落に配置されている場合は親段落) の特定の行に対して、内側のリピーターに空白行を作成する必要があります。それ、どうやったら出来るの?Google でたくさんの情報を調べましたが、この問題に対処するエントリが見つかりません。ありがとう。

4

1 に答える 1