【问题标题】:How to access rows from multiple tbody in a table?如何访问表中多个 tbody 的行?
【发布时间】:2012-05-07 01:05:07
【问题描述】:

我有这样的事情:

<table id="tableId" runat="server">
<thead>
    <tr>
        <th>Example thead1</th>
        <th>Example thead2</th>
   </tr>
</thead>
<tbody id="tb0">
    <tr>
        <td>Example 1</td>
        <td>Something</td>
   </tr>
</tbody>
<tbody id="tb1">
    <tr>
         <td>Example 2</td>
         <td>Something</td></tr>
</tbody>
<tbody id="tb2">
    <tr>
        <td>Example 3</td>
        <td>Something</td>
   </tr>
</tbody>
</table>

我使用多个具有不同 ID 的“tbody”,因此我可以随时删除或创建它。

我想做的是从表“tableId”的多个“tbody”中获取每一行。

在 C# 中,如果我使用命令“tableId.Rows[0].Cells[0].InnerHtml”,我会得到结果:“Example thead1” .

但如果我使用“tableId.Rows[3].Cells[0].InnerHtml”,我无法在表格行中获得“示例 3”,而不是我得到一个错误,指出该行不存在或超出索引。

【问题讨论】:

    标签: c# asp.net html-table row cells


    【解决方案1】:

    我已经测试了您的代码。并发现 tableId.Rows[3].Cells[0].InnerHtml 将始终给出 Example 3 ..根据您的 aspx 标记代码,这是正确的。

    我认为您的位置行索引不正确,即如下所示

    tableId.Rows[4].Cells[0].InnerHtml 不存在于您的表结构中。

    这就是为什么你得到错误 Specified argument was out of the range of valid values.Parameter name: index

    希望这对您有所帮助...祝您编码愉快...

    【讨论】:

    • 我仍然遇到同样的问题,即使我尝试使用 tableId.Rows[1].Cells[0].InnerHtml。只有第一行是工作 tableId.Rows[0].Cells[0].InnerHtml..
    【解决方案2】:

    使 tbody 元素成为服务器控件。

    <tbody id="tb2" runat="server">
        <tr>
            <td>Example 3</td>
            <td>Something</td>
       </tr>
    </tbody>
    

    然后根据需要切换可见性:

    tb2.Visible = true / false;
    

    根据评论:

    可能设计者没有创建对tb1, tb2, tb3 控件的引用,因为它们是tableId 的内部控件。 如果是这样:

    var tb2 = tableId.FindControl("tb2");
    tb2.Visible = ...
    

    【讨论】:

    • 这不起作用,因为当页面加载时,tbodys“tb0、tb1、tb2 等”尚未创建,所以我立即收到此错误:“CS0103:名称 'tb0'当前上下文中不存在"
    • 当我尝试你所说的我试图将 tableId.Rows[1].Cells[0].InnerHtml 保存到一个字符串,你是对的,使用“var tb2 = tableId.FindControl ("tb2"); tb2.Visible = ..." 使我的页面加载错误消失了,但我仍然无法将 tableId.Rows[1].Cells[0].InnerHtml 保存为字符串,我仍然得到此错误:指定的参数超出了有效值的范围。参数名称:索引
    • 但我也尝试访问我可以访问的唯一行,即第一行:tableId.Rows[0].Cells[0].InnerHtml。这次我无法将示例 thead1 保存到字符串中,并且我收到关于这行代码“tb0.Visible = true;”的错误:对象引用未设置为对象的实例。
    【解决方案3】:

    你可以使用 JQuery,像这样......

    $('tbody', '#tableid');
    

    但我想这取决于你想用它们做什么,以及在哪里

    JQuery 文档:

    选择器:http://api.jquery.com/category/selectors/

    遍历:http://api.jquery.com/category/traversing/

    【讨论】:

    • 我不明白.. 我正在尝试使用 C# 访问这些行,因此我可以稍后将其保存到 MSSQL DB
    • JQuery 是客户端,所以如果你想在服务器上得到结果,你需要使用 Json 调用(或类似的东西)。这是一篇涵盖基础知识的帖子。 stackoverflow.com/questions/3926098/… 我只是在建议另一种“破解你的坚果”的方法;0)
    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 2017-10-15
    • 2014-05-20
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多