我在aspx页面(C#)中有一个html表,其中包含
列 1.CheckBox 2.Text 3.Text 4.TextBox
我希望一次一行地遍历表并根据是否选中该复选框来处理(基于column2运行存储过程)。我怎么能这样做?
答案 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对象的集合,并且您应该能够遍历。
然而,这似乎是实现动态数据的最糟糕方式。也许有一些背景,我们可以帮助你找到更好的方法......