代码之家  ›  专栏  ›  技术社区  ›  sam

从数据集筛选datagridview中的数据

  •  0
  • sam  · 技术社区  · 7 年前

    datagridview DataSet 我试着过滤 这些有界数据 textchange

    1. 我开始键入它工作正常,除了它删除自定义 控件 headers并设置列的名称查询例如。Header是'First name',它被'NAM'替换,后者是数据库中的列名。。。

    2. 第二个问题当我进入else部分时,它不会重新绑定并抛出一个异常我错过了什么?

      public DataSet GetPatientList()
      {
          string connStr = ConfigurationManager.ConnectionStrings["SRJDconnstr"].ToString();
          string cmdStr = @"SELECT ROW_NUMBER()OVER(ORDER BY ID) AS SEQ,
                                                   ID,
                                                   DocNUM,
                                                   NAM,
                                                   FNAME,
                                                   LFNAME,
                                                   PHONE,
                                                   MOBILE,
                                                   SEX,
                                                   BIRTHDAY,
                                                   ADDRESS,
                                                   ENDATETIME
                                              FROM SICK
                                       ORDER BY ENDATETIME ASC;";
      
          SqlConnection conn = new SqlConnection(connStr);
          using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
          {
                  conn.Open();
                  cmd.CommandText = cmdStr;
                  cmd.CommandType = CommandType.Text;
      
                  ds = new DataSet();
                  da = new SqlDataAdapter(cmd);
      
                  da.Fill(ds, "PatientList");
      
                  DGV_PatientList.Columns["DGV_PatientList_RowNum"].DataPropertyName = ds.Tables["PatientList"].Columns["SEQ"].ColumnName;
                  DGV_PatientList.Columns["DGV_PatientList_PatientID"].DataPropertyName = ds.Tables["PatientList"].Columns["ID"].ColumnName;
                  DGV_PatientList.Columns["DGV_PatientList_DocNUM"].DataPropertyName = ds.Tables["PatientList"].Columns["DocNUM"].ColumnName;
                  DGV_PatientList.Columns["DGV_PatientList_FirstName"].DataPropertyName = ds.Tables["PatientList"].Columns["NAM"].ColumnName;
                  DGV_PatientList.Columns["DGV_PatientList_FatherName"].DataPropertyName = ds.Tables["PatientList"].Columns["FNAME"].ColumnName;
                  DGV_PatientList.Columns["DGV_PatientList_LastName"].DataPropertyName = ds.Tables["PatientList"].Columns["LFNAME"].ColumnName;
                  DGV_PatientList.Columns["DGV_PatientList_Phone"].DataPropertyName = ds.Tables["PatientList"].Columns["PHONE"].ColumnName;
                  DGV_PatientList.Columns["DGV_PatientList_Mobile"].DataPropertyName = ds.Tables["PatientList"].Columns["MOBILE"].ColumnName;
                  DGV_PatientList.Columns["DGV_PatientList_Gender"].DataPropertyName = ds.Tables["PatientList"].Columns["SEX"].ColumnName;
                  DGV_PatientList.Columns["DGV_PatientList_Birthday"].DataPropertyName = ds.Tables["PatientList"].Columns["BIRTHDAY"].ColumnName;
                  DGV_PatientList.Columns["DGV_PatientList_Address"].DataPropertyName = ds.Tables["PatientList"].Columns["ADDRESS"].ColumnName;
                  DGV_PatientList.Columns["DGV_PatientList_EntryDate"].DataPropertyName = ds.Tables["PatientList"].Columns["ENDATETIME"].ColumnName;
      
                  return ds;
          }
      }
      

        private void TB_FirstName_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(TB_FirstName.Text))
            {
                // first try below
                (ds.Tables["PatientList"] as DataTable).DefaultView.RowFilter = string.Format("NAM LIKE '%{0}%'", TB_FirstName.Text);
                // second try below
                //ds.Tables["PatientList"].DefaultView.RowFilter = string.Format("NAM LIKE '%{0}%'", TB_FirstName.Text);
            }
            else
            {
                DGV_PatientList.DataSource = GetPatientList();
                DGV_PatientList.DataSource = ds.Tables["PatientList"].DefaultView;
            }
        }
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   MrZander    7 年前

    AutoGenerateColumns 错误的。

    这就是导致名称更改的原因,也是您获得异常的原因。列不再存在,您正在按名称引用它们。

        2
  •  1
  •   Caius Jard    7 年前

    所有这一切的结合方式要简洁得多:

    //in your code that handles loading the grid with data, e.g. in a Load button handler
    
      patientListTableAdapter.Fill(ds.PatientList); //strongly typed dataset, table is already bound to grid in design time. 
    //Visual Studio binds it fully for you when you add it to the form, in the designer
    //you never again mess with the bindings, just fill and empty the table: MVC
    
    
    private void TB_FirstName_TextChanged(object sender, EventArgs e){
    
      if(string.IsNullOrWhiteSpace(TB_FirstName.Text)
        patientListBindingSource.Filter = null;
      else
        patientListBindingSource.Filter = string.Format("NAM LIKE '%{0}%'", TB_FirstName.Text);
    }
    

    有关如何使用数据表的指导,请参阅MSDN: https://msdn.microsoft.com/en-us/library/fxsa23t6.aspx

    我知道这很难,扔掉所有你倾注热血和泪水的代码。。但它总是令人头痛,而且永远不会正常工作,因为使用数据和绑定控件显然是错误的