2016-10-07 2 views
1

I`m делает программу с помощью форм Windows, и я уже построил несколько кодов, как этотКак фильтровать DataGridView, используя выпадающий без изменения источника данных

  1. Написать сайт URL в текстовом поле и нажмите кнопку Start, соответствуют данные, показанные в DataGridViews.

  2. У меня есть 6 DataGridViews. В первой DataGridView, совпадающие данные показали (шаг 1), а затем , другие 5 DataGridViews будут показали, как каскад см First DataGridView row`s значения (webApplicationName)

кода ниже

private void mtbtnStart_Click(object sender, EventArgs e) 
    { 
     string webApplicationName = string.Empty; 
     string siteID = string.Empty; 
     mtlblError.Text = "No record returned."; 

     Migration_Status_DAC dac = new Migration_Status_DAC(); 
     DataSet ds = new DataSet(); 

     //Web Application   
     ds = dac.SelectWebApplicationStatus(mtextUrl.Text); 
     DataTable dt = ds.Tables[0]; 


     if (ds != null && dt != null && dt.Rows.Count > 0) 
     { 
      webApplicationName = dt.Rows[0]["AppName"].ToString(); 
      mgrdWebApplication.DataSource = dt; 

      //Content Database 
      ds = dac.SelectContentDatabaseStatus(webApplicationName); 
      DataTable dtContent = ds.Tables[0]; 
      if (ds != null && dtContent != null && dtContent.Rows.Count > 0) 
      { 
       mtlblError.Visible = false; 
       mgrdContentDatabase.DataSource = dtContent; 

       //SiteCollection 
       ds = dac.SelectSiteCollectionStatus(webApplicationName); 
       DataTable dtSiteCol = ds.Tables[0]; 
       if (ds != null && dtSiteCol != null && dtSiteCol.Rows.Count > 0) 
       { 
        mgrdSiteCollections.DataSource = dtSiteCol; 

        //Sites 
        ds = dac.SelectSitesStatus(webApplicationName); 
        DataTable dtSites = ds.Tables[0]; 
        if (ds != null && dtSites != null && dtSites.Rows.Count > 0) 
        { 
         siteID = dtSites.Rows[0]["SiteID"].ToString(); 
         mgrdSites.DataSource = dtSites; 

         //Lists 
         ds = dac.SelectListsStatus(siteID); 
         DataTable dtLists = ds.Tables[0]; 
         if (ds != null && dtLists != null && dtLists.Rows.Count > 0) 
         { 
          mgrdLists.DataSource = dtLists; 
         } 
         //Document Library 
         ds = dac.SelectDocumentLibraryStatus(siteID); 
         DataTable dtDocLib = ds.Tables[0]; 
         if (ds != null && dtDocLib != null && dtDocLib.Rows.Count > 0) 
         { 
          mgridDocumentLibrary.DataSource = dtDocLib; 
         } 
        } 
        else 
        { 
         mtlblError.Visible = true; 
        } 
       } 
       else 
       { 
        mtlblError.Visible = true; 
       } 
      } 
      else 
      { 
       mtlblError.Visible = true; 
      } 

     } 
     else 
     { 
      mgrdWebApplication.DataSource = null; 
      mgrdContentDatabase.DataSource = null; 
      mgrdSiteCollections.DataSource = null; 
      mgrdSites.DataSource = null; 
      mgrdLists.DataSource = null; 
      mgridDocumentLibrary.DataSource = null; 
     } 

    } 

И Теперь я хочу, чтобы добавить этот

  1. Добавить COMBOBOX и добавить некоторые условия, например, [Показать все] и [См Over 100GB DB]

  2. Если я выберу вариант [См. Более 100 ГБ DB], в этом DataGridView отображаются только согласованные строки.

  3. Это означает, что я хочу, чтобы фильтровать DataGridView с помощью Selection COMBOBOX и Datasource уже

    переплетены, поэтому я хочу, чтобы не изменить DataSource ....

Я пытаюсь найти выпадающий и DataGridView, но, как правило, связанные с Combobox в DataGridView ....

и как я могу получить первое значение DataGridViews`s (webApplicationName)

Пожалуйста, кто-нибудь помочь мне .. У меня нет ни малейшего представления ...

Благодаря

+0

Возможные дублировать o f [Фильтровать DataGrid для имени с помощью TextBox динамически] (http://stackoverflow.com/questions/34221657/filter-datagrid-for-name-with-textbox-dynamically) –

ответ

2

Вы можете использовать BindingSource, чтобы связать ваш источник данных к вашей DataGridView. Таким образом вы изменяете свойство Filter вашего источника привязки, и фильтр автоматически применяется к данным, отображаемым в сетке. Не нужно менять источник данных.

+0

Спасибо, ваш ответ Хасан Эскандари. –

+0

Но я использовал Dataview RowFilter lkie this –

+0

dvLists.RowFilter = string.Format ("ListLastModifyDate <= listModifiedDate", mtCbListsSearchConditions.SelectedItem.Нанизывать()); a –

0

Я построил код, и работает хорошо

  1. Использование ComboBox SelectedItemChanged событие

  2. Использование DataView и DataView.RowFilter

коды ниже

 private void mtcbContentDBSearchCondition_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      DataView dvContentDatabase = new DataView(dtContent); 

      if (mtcbContentDBSearchCondition.SelectedItem.ToString() == "All") 
      { 
       mgrdContentDatabase.DataSource = dtContent; 
      } 
      else 
      { 
       dvContentDatabase.RowFilter = string.Format("ContentDBSize >= 300000000", mtcbContentDBSearchCondition.SelectedItem.ToString()); 
       mgrdContentDatabase.DataSource = dvContentDatabase; 
      } 
     } 
Смежные вопросы