【问题标题】:Check state of combobox and change textbox readonly检查组合框的状态并只读更改文本框
【发布时间】:2014-02-17 23:18:08
【问题描述】:

我有一个显示数据网格视图和文本框和组合框的表单。在组合框中选择列名并在文本框中键入搜索时,它会过滤并显示搜索到的数据。 How can I detect if the combobox has nothing selected, and change the textbox readonly state to true, and when something is selected, change it back to false so I can search?

DataTable dt;
        private void searchForm_Load(object sender, EventArgs e)
        {
            SqlCeConnection con = new SqlCeConnection(@"Data Source=|DataDirectory|\LWADataBase.sdf;");
            SqlCeDataAdapter sda = new SqlCeDataAdapter("select * from customersTBL", con);
            dt = new DataTable();
            sda.Fill(dt);
            dataGridView1.DataSource = dt;
            comboSearch.Items.Add("[First Name]");
                comboSearch.Items.Add("Surename");
            comboSearch.Items.Add("[Address Line 1]");
            comboSearch.Items.Add("[Address Line 2]");
            comboSearch.Items.Add("County");
            comboSearch.Items.Add("[Post Code]");
            comboSearch.Items.Add("[Contact Number]");
            comboSearch.Items.Add("[Email Address]");



        }



        private void searchTxt_TextChanged(object sender, EventArgs e)
        {


            {
                DataView dv = new DataView(dt);
                dv.RowFilter = "" + comboSearch.Text.Trim() + "like '%" + searchTxt.Text.Trim() + "%'";
                dataGridView1.DataSource = dv;
            }



        }

【问题讨论】:

    标签: c# winforms datagridview combobox


    【解决方案1】:

    你可以试试这个

    if( ComboBox.SelectedItem == null ) {
       // do something
    TextBox.ReadOnly = true;       //Using the TextBox.ReadOnly property
    
    }
    else{
    Textbox.ReadOnly=false;
    }
    

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      在您的 FormLoad 中将一行添加到 comboSearch 控件以作为空行。确保它与 [First Name] 项目有关。

      comboSearch.Items.Add(string.Empty);
      comboSearch.Items.Add("[First Name]");
      

      为 SelectedIndexChanged 添加一个事件处理程序到 comboSearch。在事件内部,设置 searchTxt 控件的 ReadOnly 属性。它可能看起来像这样:

      private void comboSearch_SelectedIndexChanged(object sender, EventArgs e)
      {
          searchTxt.ReadOnly = comboSearch.SelectedIndex != 0;
      }
      

      【讨论】:

      • 文本框不会改变只读状态,它只是保持只读 = false
      • 在 searchTxt.ReadOnly 行设置断点,以验证您的程序是否正在执行该行。此外,在调试该行时,请验证单击顶部(空白)行时 SelectedIndex 是什么。确保在设计视图的“属性”窗口中将事件绑定到组合搜索框。
      【解决方案3】:

      我添加了一个 SelectedIndexChanged 事件:

      private void comboSearch_SelectedIndexChanged(object sender, EventArgs e)
              {
                  searchTxt.ReadOnly = false;
              }
      

      并将 TextChanged 事件更改为:

      private void searchTxt_TextChanged(object sender, EventArgs e)
              {
                  if (comboSearch.SelectedItem == null)
                  {
                      searchTxt.ReadOnly = true;
                      MessageBox.Show("Please select a search criteria");
                  }
      
      
      
                  else
                  {
                      searchTxt.ReadOnly = false;
                      DataView dv = new DataView(dt);
                      dv.RowFilter = "" + comboSearch.Text.Trim() + "like '%" + searchTxt.Text.Trim() + "%'";
                      dataGridView1.DataSource = dv;
                  }
              }
      

      它现在可以按照我的意愿运行

      【讨论】:

      • 但是用户可以在没有选择搜索条件时开始输入?当没有选择搜索条件时,为什么不阻止用户输入呢?只是我的意见,很高兴你明白了。
      • 我尝试了所有其他答案,但没有一个可行,这对我有用。
      【解决方案4】:

      向组合框添加一个空项,然后

      if(comboSearch.SelectedItem =="")
      {
      searchTxt.ReadOnly = true;
      }
      else
      {
      searchTxt.ReadOnly = false;
      }
      

      在执行你的代码后添加这一行:

      comboSearch.SelectedIndex =0;
      

      确保您的空项目是第一个项目。

      【讨论】:

      • 那么你需要在列表框中有一个空项,我会更新代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多