我有一个带有行的表格,我用按钮点击事件显示/隐藏。我想检查我的所有可见行,其中包含string.IsNullOrEmpty和IsDateEmpty的单元格索引。 怎么做?
以下代码(用于检查可见单元格[0] TextBox)无效:
var allVisibleRows = myTbl.Rows.Cast<TableRow>().Where(row => row.Visible);
bool anyTextBoxEmpty = allVisibleRows.Any(row => string.IsNullOrEmpty(((TextBox)row.Cells[0].Controls[0]).Text));
//DestinavionValidation
if (anyTextBoxEmpty)
{
return "Please, insert a TEXT";
}
以下代码(用于检查第二个单元格1 DateTimeControl)无效:
bool anyDateTimeOneValid = allVisibleRows.Any(row => !(((DateTimeControl)row.Cells[1].Controls[0])).IsValid);
bool anyDateTimeOneEmpty = allVisibleRows.Any(row => (((DateTimeControl)row.Cells[1].Controls[0])).IsDateEmpty);
//Date Validation
if (anyDateTimeOneValid || anyDateTimeOneEmpty)
{
return "Please, insert a Date!";
}
这是以下错误
System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围。参数名称:在System.Linq.Enumerable.Any [TSource](IEnumerable
1 source, Func
2谓词)的Lirex.WayBillModule.b__2f(TableRow行)的System.Web.UI.ControlCollection.get_Item(Int32索引)处的索引/ p>
答案 0 :(得分:2)
通过使用此行(). All(row => row.Visible);
,您将获取所有行的可见属性,而不是您所期望的行。因此,请使用以下选择行
var tableRow = myTbl.Rows.Cast<TableRow>().Where(row => row.Visible);
答案 1 :(得分:1)
Enumerable.All
返回bool
,您希望所有可见行都使用Where
:
var allVisibleRows = myTbl.Rows.Cast<TableRow>().Where(row => row.Visible);
您现在想要检查第一个单元格中是否有空TextBox
:
bool anyTextBoxEmpty = allVisibleRows
.Any(r => String.IsNullOrWhiteSpace(((TextBox)r.Cells[0].Controls[0]).Text));
答案 2 :(得分:1)
你可以尝试下面如果能够工作,它将检查所有可见行上的空文本框,只需修改以检查其他控件类型。
var tableRows = Table1.Rows.Cast<TableRow>().Where(row => row.Visible);
bool hasEmptyField = false;
foreach (var row in tableRows.Where(row => row.Cells.Cast<TableCell>()
.SelectMany(
item => item.Controls.Cast<Control>()
.Where(cntrl => cntrl.GetType() == typeof (TextBox)))
.Any(cntrl => string.IsNullOrEmpty(((TextBox) cntrl).Text))))
{
hasEmptyField = true;
break;
}
if (hasEmptyField)
{
//Do what you want...
}
编辑答案。上次查询仅检查最后一个可见行。进行了一些更改,现在使用WHERE子句而不是LAST获取可见行。更改还包括每行的循环。
以下是我发布的原始代码,仅检查最后一行。
var tableRow = Table1.Rows.Cast<TableRow>().Last(row => row.Visible);
var hasEmptyTextBox =
tableRow.Cells.Cast<TableCell>()
.SelectMany(
item => item.Controls.Cast<Control>()
.Where(cntrl => cntrl.GetType() == typeof(TextBox)))
.Any(cntrl => string.IsNullOrEmpty(((TextBox)cntrl).Text));