【问题标题】:Add table row as soon as textbox is not empty ASP.NET / C#文本框不为空时添加表格行 ASP.NET / C#
【发布时间】:2014-04-17 11:54:24
【问题描述】:

我目前有一个有两行的表。每行包含一个复选框(第一列除外),其中一列包含一个复选框,下一列包含一个标签,第三列包含一个文本区域。

我目前有两个问题,一个是我的“添加行”按钮只会添加一行(如果我再次单击它,它不会添加额外的行)。我注释掉了 ID 字段,认为这可能是它不会添加另一行的原因(不希望两个项目共享和 ID),但事实并非如此。

我不知道该怎么做的另一件事是,一旦我开始在文本框“mcOpt1”中输入,就会自动调用此函数。理想情况下,我希望它添加一个名为“mcOpt2”的文本框的行,一旦该文本框有文本/不为空,它将再次添加另一行。

我对这些语言很陌生,那么如何才能实现呢?

桌子:

   <asp:Table ID="mcOptTable" runat="server" CssClass="halfwide">
        <asp:TableRow runat="server" ID="question">
            <asp:TableCell runat="server"></asp:TableCell>
            <asp:TableCell runat="server">Question:</asp:TableCell>
            <asp:TableCell runat="server">
                <asp:TextBox ID="mcQuestion" runat="server" TextMode="MultiLine"></asp:TextBox>
            </asp:TableCell>
        </asp:TableRow>
        <asp:TableRow runat="server" ID="opt1">
            <asp:TableCell runat="server">
                <asp:CheckBox ID="mcOpt1IsCorrect" runat="server" CssClass="leftmargin10" />
            </asp:TableCell>
            <asp:TableCell runat="server">Option 1:</asp:TableCell>
            <asp:TableCell runat="server">
                <asp:TextBox ID="mcOpt1" runat="server" TextMode="MultiLine"></asp:TextBox>
            </asp:TableCell>
        </asp:TableRow>
    </asp:Table>

按钮

<asp:Button ID="addRow" runat="server" Text="Add a Row" OnClick="addRow_Click" />

C# 添加表格行代码

protected void addRow_Click(object sender, EventArgs e)
{
    TableRow row = new TableRow();
    TableCell optText = new TableCell();
    TableCell tBox = new TableCell();
    TableCell isCor = new TableCell();
    optText.Text = "Option 2:";
    tBox.Text = "text box here";
    //tBox.ID = "opt2";
    isCor.Text = "?";
    //isCor.ID = "opt2IsCorrect";
    row.Cells.Add(isCor);
    row.Cells.Add(optText);
    row.Cells.Add(tBox);
    mcOptTable.Rows.Add(row);
}

【问题讨论】:

  • 至于自动调用您的函数,请查看文本框引发的事件。为每个文本框订阅一个委托并在其中调用您想要的方法。
  • 这些问题描述了类似的情况。 (link #1)(link #2)
  • 正在添加新行,但由于 asp.net 的无状态特性(链接问题中的更多详细信息),前一行正在被破坏。如果您将"text box here" 更改为String.Format("text box here {0}", DateTime.Now),您可以更轻松地看到这一点。

标签: c# asp.net htmltable-control


【解决方案1】:

问题是您没有“记住”回发之间添加的行。第一次添加行(服务器端)时,它会在回发时呈现。但是,下次您要添加一行(服务器端)时,前一行不再存在,主要是因为该表再次以其原始状态呈现。

您需要做的是“记住”您添加的行,并确保在每次回发时都呈现所有这些行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2017-10-11
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多