代码之家  ›  专栏  ›  技术社区  ›  jeremcc chris

使用UpdatePanel动态刷新HTML表中的行

  •  6
  • jeremcc chris  · 技术社区  · 16 年前

    有一个地方我遇到了一些麻烦,我想知道是否有人有什么建议。我的表单使用了一种非常典型的基于表格的布局,其中表格用于显示标签和字段的网格,供用户填写。(我已经知道有些人不喜欢基于表格的布局,我也理解其利弊。但这是我做出的选择,所以请不要回答“不要使用基于表格的布局”。)

    现在我的问题是有时候我会 将UpdatePanel包装在一组行周围,以便动态隐藏和显示它们,但UpdatePanel不允许这样做。基本的问题是,它将一个div包装在它们周围,而据我所知,不能将div包装在表行周围。它不是有效的HTML。

    所以我一直在处理的方法是让我的动态行完全成为一个新表的一部分,这是可以的,但是你必须处理手动将所有列与上面的表对齐,这是一个真正的痛苦和非常脆弱的过程。

    所以,问题是。。。有人知道使用UpdatePanel或类似工具动态生成或刷新行的技术吗?希望这个解决方案会像在页面上删除UpdatePanel一样简单,但即使不这样,我还是很想听到它。

    7 回复  |  直到 16 年前
        1
  •  5
  •   Nick    16 年前

    UpdatePanel呈现为DIV标记,因此在表行之间无效。如果您只想在保持(非常糟糕的)表布局的同时隐藏内容,请在行中包含一个样式标记,其中包含一个ASP var作为可见性值,如下所示:

    <tr style="display: <%= visible %>">
         <td></td>
    </tr>
    

    然后根据需要操纵可见变量。

    这就是说,忽视正确的布局在这里是有害的。

        2
  •  3
  •   Daniel Schaffer    16 年前

    <button onclick="$('.inactive').toggle();">Toogle Inactive</button>
    
    <table>
    <tr class="inactive"><td>Inactive 1</td></tr>
    <tr class="inactive"><td>Inactive 2</td></tr>
    <tr><td>Active 1</td></tr>
    <tr><td>Active 2</td></tr>
    </table>
    
        3
  •  2
  •   Astra    16 年前

    如果要动态创建控件,则可以在生成控件时决定显示或隐藏哪些内容。

    <table>
        <tr id="row1" runat="server">
            <td>Label</td><td>Field</td>
        </tr>
    </table>
    

    从代码背后:

    row1.visible = false;
    

    修改@Rob Allen的答案,执行以下操作:

    CSS

    .hidden_row {
        display: none;
    }
    

    <tr class="<%= variable %>">
    

        4
  •  2
  •   jeremcc chris    16 年前

    答:最终,使用UpdatePanel无法做到这一点。您所能达到的最佳效果是刷新整个表,而不是单个行。

        5
  •  2
  •   Martijn Pieters    12 年前

    如果整个表本身也在Updatepanel中,则可以更新表的TD部分!!

    不知道为什么。它对我有用。

    <asp:UpdatePanel ID="UpdatePanel1" runat="server"><ContentTemplate> <table ID="Table1">
    <tr>
    <td >
    ...
    </td>
    <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
    <td >
    ....
    </td>
    <td >
    ...
    </td>
    <td >
    ...
    </td>
    </ContentTemplate>
    </asp:UpdatePanel> 
    
    </tr>
    
     </table></ContentTemplate></asp:UpdatePanel>  
    
        6
  •  2
  •   Jehof    12 年前

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <table width="100%">
        <tr>
            <td style="width: 300px">
                Employee First Name
            </td>
            <td>
                <asp:TextBox ID="txtFname" runat="server"></asp:TextBox>
            </td>
        </tr>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <tbody>
                    <tr>
                        <td style="width: 300px">
                            Date Of Birth
                        </td>
                        <td>
                            <asp:TextBox ID="txtDOB1" runat="server" OnTextChanged="txtDOB_TextChanged" AutoPostBack="true"></asp:TextBox>
                            <asp:CalendarExtender ID="txtDOB1_CalendarExtender" runat="server" Enabled="True"
                                TargetControlID="txtDOB1">
                            </asp:CalendarExtender>
                        </td>
                    </tr>
                    <tr>
                        <td style="width: 300px">
                            Age
                        </td>
                        <td>
                            <asp:TextBox ID="txtAge" Style="font-weight: bold; font-size: large" runat="server"
                                Enabled="false"></asp:TextBox>
                        </td>
                    </tr>
                </tbody>
            </ContentTemplate>
        </asp:UpdatePanel>
        <tr>
            <td align="right" style="width: 300px">
                <asp:Button ID="btnSubmit" runat="server" CssClass="button" Text="Submit" />
            </td>
            <td>
                <asp:Button ID="btnClear" runat="server" CssClass="button" Text="Reset" />
            </td>
        </tr>
    </table>
    

    类别代码:

    protected void txtDOB_TextChanged(object sender, EventArgs e)
    {
        try
        {
            DateTime Today = DateTime.Now;
            DateTime DOB = Convert.ToDateTime(txtDOB1.Text);
            ArrayList arr = new ArrayList();
            arr = span(Today, DOB);
            arr[0].ToString();//For Years
            arr[1].ToString();//For Months
            arr[2].ToString();//For Days
            txtAge.Text = "Y: " + arr[0].ToString()+",M: "+arr[1].ToString()+",D: "+arr[2].ToString();
    
        }
        catch (Exception ex)
        {
    
            lblError.Text = "Error : " + ex.Message ;
        }
    }
    public ArrayList span(DateTime f, DateTime l)
    {
        int days;
        int months;
        int years;
    
        int fird = f.Day;
        int lasd = l.Day;
    
        int firm = f.Month;
        int lasm = l.Month;
    
        if (fird >= lasd)
        {
            days = fird - lasd;
            if (firm >= lasm)
            {
                months = firm - lasm;
                years = f.Year - l.Year;
            }
            else
            {
                months = (firm + 12) - lasm;
                years = f.AddYears(-1).Year - l.Year;
            }
        }
        else
        {
            days = (fird + 30) - lasd;
            if ((firm - 1) >= lasm)
            {
                months = (firm - 1) - lasm;
                years = f.Year - l.Year;
            }
            else
            {
                months = (firm - 1 + 12) - lasm;
                years = f.AddYears(-1).Year - l.Year;
            }
        }
    
    
        if (days < 0)
        {
            days = 0 - days;
        }
        if (months < 0)
        {
            months = 0 - months;
        }
        ArrayList ar = new ArrayList();
        ar.Add(years.ToString());
        ar.Add(months.ToString());
        ar.Add(days.ToString());
        return ar;
    }
    
        7
  •  0
  •   Marek Kwiendacz    13 年前

    在我们的项目中,我们找到了这个问题的一些解决方案。我们必须创建复杂的RAPORT,每行有许多活动元素(编辑、接受等按钮)。

    我们创建了放置在updatepanel中的div(用于在需要时更新整个表)。在这个div中,我们创建了带有标题定义的表和eaach行的单独表(这些表放在更新面板中)。为了在每行中创建相等的列,我们必须为每个表单元使用css类。

    所以,我们有类似的东西(在每一行中,我们有几个按钮、下拉列表、工具提示等,但为了理解这个想法,我将其截断为单列):

    <UpdatePanel>
    <DIV>
        <TABLE>
        <TR>
        <TH class="h1">Name</TH>
        </TR>
        </TABLE>
    
        <UpdatePanel Id='InnerPanel1'>
            <TABLE>
            <TR>
            <TD class="h1">John</TD>
            </TR>
            </TABLE>
        </UpdatePanel>
    </DIV>
    </UpdatePanel>