【发布时间】:2018-08-02 19:38:00
【问题描述】:
我有一个 Win Form 应用程序,在其中一个表单中,我放置了一个 TextBox 用于搜索和一个 DataGridView 以显示结果。在网格中,我在设计模式下设置了一些设置(隐藏一些列并为列放置标题文本)。然后有一种方法可以像这样填充网格:(首先,它在PrsCode 中搜索,如果没有找到,则在人员的姓氏中搜索,如果在两个提到的字段中都找不到匹配项,则希望显示空白网格)
public void FillGrid1(bool IsSearching = false)
{
if (IsSearching && !string.IsNullOrEmpty(TxbSearch.Text.Trim()))
{
var prsCode = from p in db.Prs
join pd in db.PDPs on p.ID equals pd.PrsID
where p.PrsCode.StartsWith(TxbSearch.Text.Trim())
select p;
var prsLname = from p in db.Prs
join pd in db.PDPs on p.ID equals pd.PrsID
where p.Lname.Contains(TxbSearch.Text.Trim())
select p;
if (prsCode.Count() > 0)
{
DG_PDP.DataSource = from p in db.Prs
join pd in db.PDPs on p.ID equals pd.PrsID
where p.PrsCode.StartsWith(TxbSearch.Text.Trim())
select p;
}
else if (prsLname.Count() > 0)
{
DG_PDP.DataSource = from p in db.Prs
join pd in db.PDPs on p.ID equals pd.PrsID
where p.Lname.Contains(TxbSearch.Text.Trim())
select p;
}
else
{
DG_PDP.DataSource = null;
}
}
else
{
DG_PDP.DataSource = from p in db.Prs
join pd in db.PDPs on p.ID equals pd.PrsID
select p;
}
在Text Box的TextChanged事件中,我写了如下:
FillGrid1(true);
键入并找到匹配项时,它运行良好。当没有找到匹配项时,它会显示一个空白网格,这很好。但是,在按下 BackSpace 并清理 TextBox 以重新键入字符串后,如果再次找到匹配项并且网格显示数据,则由设计模式设置的列可见性和标题文本等整个设置不起作用,就像它是从来没有做过。如果我评论 else 块
else
{
DG_PDP.DataSource = null;
}
设置的问题解决了,但是我的最后一个搜索目标还没有达到:
如果在提到的两个字段中都没有找到匹配项,则需要显示一个空白网格
【问题讨论】:
-
当您按退格键并删除所有内容时,及时文本框为空,
if (IsSearching && !string.IsNullOrEmpty(TxbSearch.Text.Trim()))是通过还是阻止它? -
让我测试并告诉你,拜托......但在测试之前,我认为它会阻止它,因为正如我之前提到的,问题由此触发; DG_PDP.DataSource = null;
-
我放了两个断点,第一个在 !string.IsNullOrEmpty(TxbSearch.Text.Trim())) 之后,第二个在 DG_PDP.DataSource = null 行,当按退格键删除所有内容时,只有第二个断点点命中,它显示 !string.IsNullOrEmpty(TxbSearch.Text.Trim())) 块我想,你同意吗?
-
是的,这就是我的怀疑。而不是
!string.IsNullOrEmpty(TxbSearch.Text.Trim())使用!string.IsNullOrWhiteSpace(TxbSearch.Text) -
谢谢,但是请解释一下这个字符串方法和设计模式设置的那些设置之间的关系是什么?
标签: c# winforms datagridview