如果第0列中的单元格包含指定值,则需要选择整行。我有一个TextBox和DaraGridView。当我在gridview行中存在一个值而没有问题但是当gridview中不存在put时,程序抛出一个异常 提前谢谢!!
private void Searchvalue_TextChanged(object sender, EventArgs e)
{
dataGridView1.ClearSelection();
var enteredText = (sender as TextBox).Text;
int rowIndex = -1;
bool tempAllowUserToAddRows = dataGridView1.AllowUserToAddRows;
// Turn off or .Value below will throw null exception
dataGridView1.AllowUserToAddRows = false;
if (enteredText != String.Empty)
{
DataGridViewRow row = dataGridView1.Rows
.Cast<DataGridViewRow>()
.Where(r => r.Cells["Column1"].Value.ToString().Contains(enteredText)).First();
rowIndex = row.Index;
dataGridView1.AllowUserToAddRows = tempAllowUserToAddRows;
dataGridView1.Rows[rowIndex].Selected = true;
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.Rows[rowIndex].Index;
}
}
答案 0 :(得分:1)
序列不包含元素
这告诉我if (enteredText != String.Empty)
{
DataGridViewRow row = dataGridView1.Rows
.Cast<DataGridViewRow>()
.Where(r => r.Cells["Column1"].Value.ToString().Contains(enteredText))
.First();
rowIndex = row.Index;
dataGridView1.Rows[rowIndex].Selected = true;
}
在以下代码中失败。
if (!string.IsNullOrEmpty(enteredText))
{
var row = dataGridView1.Rows
.Cast<DataGridViewRow>()
.FirstOrDefault(r => ((string)r.Cells["Column1"].Value).Contains(enteredText));
if (row != null)
{
row.Selected = true;
}
}
将其改为此以避免异常(也改变了其他小事)。
if (!string.IsNullOrEmpty(enteredText))
{
var rows = dataGridView1.Rows
.Cast<DataGridViewRow>()
.Where(r => ((string)r.Cells["Column1"].Value).Contains(enteredText));
foreach (var row in rows)
{
row.Selected = true;
}
}
或者,如果要选择包含文本的所有行...
library(ggplot2)
x<-Allele<- c(4,4,5,5,5,7,9,11,11,11,13,14,15,15,16,17,17,19,19,19)
y<-SR<- c(5.5,5.6,5.7,6,6.1,8,8,12,12.1,13,14,14,16,16.5,17,17,
17.1,18,19,20)
D3S = data.frame(Allele, SR)
Mod <- lm(SR ~ Allele)
pred.int <- predict(Mod, interval = "prediction")
mydata <- cbind(D3S, pred.int)
# Regression line + confidence interval
p <- ggplot(mydata, aes(Allele, SR)) +
geom_point(size=3) +
stat_smooth(method = lm, color="black")
# Add prediction intervals
myplot= p + geom_line(aes(y = lwr), color = "black",
linetype = "dashed", size=0.8)+
geom_line(aes(y = upr), color = "black",
linetype = "dashed", size=0.8)
myplot + theme_bw() + theme(panel.border = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black"))
答案 1 :(得分:0)
目前还不清楚你要在这里完成什么。它似乎是某种“过滤”或“选择”机制。无论你想要在这里完成什么......看起来你是以最困难的方式解决这个问题。
正如其他人指出这个错误...... Sequence contains no elements?
注释和错误“明确”指出,您收到“InvalidOperationException”。因此,我不是LINQ专家,我猜你在使用以下命令时......
Where(r => r.Cells["Column1"].Value.ToString().Contains(enteredText)).First();
如果找不到enteredText
...... .First()
将返回什么?这可能是您的错误的原因。用下面一个评论很好的解决方案替换它可以解决“这个”问题。
Where(r => r.Cells["Column1"].Value.ToString().Contains(enteredText)).FirstOrDefault();
如果找不到文本, FirstOrDefault()
将返回null。这意味着当找不到文本时它不会“失败”“InvalidOperationException”...但是,变量row
将为null并且代码将在下一行上“失败”......这带有空指针异常的时间,因为如果找不到文本,row
将为null。
在不了解您要在整体视角中尝试做什么的情况下,我强烈建议您使用某种“集合”将数据存储在网格中,其中大多数DataSources
都内置了机制在进行搜索/排序等操作时提供帮助......显然,您需要更多的工作来自行管理网格数据。
不使用数据源,下面的代码应该完成您描述的内容。
private void Searchvalue_TextChanged(object sender, EventArgs e) {
dataGridView1.ClearSelection();
var targetText = Searchvalue.Text;
if (targetText != String.Empty) {
foreach (DataGridViewRow row in dataGridView1.Rows) {
if (!row.IsNewRow && row.Cells["Column1"].Value != null && row.Cells["Column1"].Value.ToString().Contains(targetText)) {
row.Selected = true;
dataGridView1.FirstDisplayedScrollingRowIndex = row.Index;
break; // remove this if you want to select all the rows that contain the text
}
}
}
}