使用C#遍历html表中的行

时间:2010-01-06 19:42:06

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

我在aspx页面(C#)中有一个html表,其中包含

 1.CheckBox  2.Text  3.Text  4.TextBox

我希望一次一行地遍历表并根据是否选中该复选框来处理(基于column2运行存储过程)。我怎么能这样做?

4 个答案:

答案 0 :(得分:5)

假设您正在使用Table服务器控件,那么它只是:

foreach (TableRow row in table.Rows)
    {
        var checkBox = (CheckBox)row.Cells[0].Controls[0]; //Assuming the first control of the first cell is always a CheckBox.

        if (checkBox.Checked)
        {
            var col2 = (TextBox)row.Cells[1].Controls[0];

            /* Do Stuff With col2 */
        }
        else
        {
            /* Do Stuff */
        }
    }

如果您只使用常规html表(使用runat =“server”)以及html表单控件,则只需将TableRow更改为HtmlTableRow,将CheckBox更改为HtmlInputCheckBox,将TextBox更改为HtmlInputText。所有这些控件都在System.Web.UI.HtmlControls命名空间中。

答案 1 :(得分:1)

我已经有一些方便的VB.NET代码可以做到这一点。它只是稍作调整。它可以很容易地移植到C#。

Protected Sub Page_Load()
    FindCheckBoxes(MyTable)
End Sub

Protected Sub FindCheckBoxes(ByRef ParentControl As Control)
    For Each ctrl As Control In ParentControl.Controls
        If TypeOf ctrl Is CheckBox Then
            If DirectCast(ctrl, CheckBox).Checked Then
                ' do something
            Else
                ' do something else
            End If
        ElseIf ctrl.HasControls Then
            FindCheckBoxes(ctrl)
        End If
    Next
End Sub

这足够灵活,可以在任何内容(不仅仅是表格)中查找复选框。但是,在您的特定场景中,您可能更喜欢使用像noblethrasher的答案。

我的回答是一种爬行树的递归方法,找到每个复选框。但是,如果您知道要查找复选框的哪一列,并且您知道它没有隐藏在其他容器中,那么noblethrasher是一种简单,直接且更有效的算法。

答案 2 :(得分:0)

查看HtmlTable类及其Rows属性。

http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmltable(VS.71).aspx

我确信这可以帮助你!

答案 3 :(得分:0)

如果在html中向表标记添加runat =“server”属性,您应该能够将该表视为Control对象的集合,并且您应该能够遍历。

然而,这似乎是实现动态数据的最糟糕方式。也许有一些背景,我们可以帮助你找到更好的方法......