问题 我的过滤器控件在数据库项目上无法正常工作,有人可以帮助我修复它吗?

神是

成员
已加入
2019年7月31日
留言内容
11
编程经验
Beginner
我正在分别使用Microsoft Visual Studio 2013和Microsoft SQL Server 2014进行数据库项目。我的项目中有大约四个表,名为UsersDataSet。我想使用组合框和文本框为每个表单应用程序创建过滤器控件。我想以UsersRegister表单为例。

在loginDataSet过滤器列中,我配置了SQL查询。
"选择用户名,密码,角色
从登录
在哪里(用户名= @用户名)"

同样地;

选择用户名,密码,角色
从登录
在哪里(角色= @角色)

然后在代码窗口中;

C#:
  private void txtSearch_KeyUp(object sender, KeyEventArgs e)
        {
            if(txtSearch.Text == "")
            {
              
                this.loginTableAdapter.Fill(this.usersDataSet.Login);
            }
            else if(combSearch.SelectedIndex == 0)
            {
             
                this.loginTableAdapter.FillByUsername(this.usersDataSet.Login, usernameTextBox.Text);
            }
            else if(combSearch.SelectedIndex == 1)
            {
              
                this.loginTableAdapter.FillByRole(this.usersDataSet.Login, combRole.Text);
            }
        }

但是,当我运行该应用程序并尝试过滤任何记录时,仅第一行被过滤。除非我将游标放在特定的用户名或角色上,然后才能将其过滤。我不知道错误在哪里。项目中的所有其他应用程序都会发生此错误。

如果有人可以帮助我修复此问题,请多谢。

谢谢。

神是
 
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,552
地点
弗吉尼亚州切萨皮克
编程经验
10+
Let me see if I understand your code correctly. You are waiting for key up events in your txtSearch text box.

对于第3-6行,如果文本框为空,则用所有可用数据填充数据集。

If the text box is not empty (lines 8-17), then you fill the data set with the matching username found in usernameTextBox textbox if the combSearch is selecting the first item. Otherwise, you fill the data set with the matching role found in combRole combobox if the combSearch is selecting the second item.

您是说在所有情况下都只返回一次吗?还是在某些情况下只返回一项?
 

神是

成员
已加入
2019年7月31日
留言内容
11
编程经验
Beginner
Let me see if I understand your code correctly. You are waiting for key up events in your txtSearch text box.

对于第3-6行,如果文本框为空,则用所有可用数据填充数据集。

If the text box is not empty (lines 8-17), then you fill the data set with the matching username found in usernameTextBox textbox if the combSearch is selecting the first item. Otherwise, you fill the data set with the matching role found in combRole combobox if the combSearch is selecting the second item.

您是说在所有情况下都只返回一次吗?还是在某些情况下只返回一项?
嗨跳伞者,

"您是说在所有情况下都只返回一次吗?还是在某些情况下只返回一项?"

Only the first row is returned in all cases. Then again, let me say for example; Godis is Admin and on any other row. 当我点击该行并进行过滤时 all Godis will display. Or, when I want to filter for User1 在角色列中;如果我单击包含User1的任何行,则将显示所有User1。

实际上,我不知道错误在哪里。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,552
地点
弗吉尼亚州切萨皮克
编程经验
10+
您一直在说:"当我点击该行并进行过滤时"您能告诉我们处理该行选择和过滤器设置的事件处理程序吗?您在原始帖子中显示的代码是用于keyup事件的。键入事件通常与您在其中键入内容的文本框相关联。您一直在谈论选择一行然后进行过滤。您是否有选定的行事件处理程序?您是否有单独的过滤器按钮?如果是这样,您可以向我们展示按钮单击事件处理程序吗?
 

神是

成员
已加入
2019年7月31日
留言内容
11
编程经验
Beginner
确实,我没有任何单独的过滤器按钮,也不想有一个。我宁愿打算将Keyup事件用于过滤器文本框,以实现我的目标,但结果对我来说很奇怪。当我感到困惑时,是将光标放在一行中,然后在keyup文本框中键入内容。那就是我使用这句话的地方;"当我点击该行并进行过滤时"。抱歉,在上下文中使用它可能是错误的。我的期望与预期的是,当我在组合框中选择一个项目并在文本框中键入内容时,它应该进行相应的过滤。我在DataSet中的查询和在窗口中的代码是我最初提供的,但是我不知道出了什么问题,出处和原因。
 
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,552
地点
弗吉尼亚州切萨皮克
编程经验
10+
我的期望与预期的是,当我在组合框中选择一个项目并在文本框中键入内容时,它应该进行相应的过滤。
为什么那是您的期望?这不是标准Windows Combobox的工作方式。您期望的行为是某些网站的工作方式。
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,058
地点
挪威
编程经验
10+
使用TableAdapters填充数据集-Visual Studio
ClearBeforeFill属性
默认情况下,每次运行查询以填充TableAdapter的数据表时,都会清除现有数据,并且仅将查询结果加载到表中。
That means that if your KeyUp filtering is hit the results in table should start from empty and fill according to each if statement. Also use debugging to make sure you get/see correct filtering for different conditions, add else while at it to see if conditions is not met.
 
最佳 底部