如何使用组合框过滤Datagridview而不更改数据源

时间:2016-10-07 09:19:26

标签: c# winforms datagridview combobox

我正在使用Windows窗体创建一个程序,我已经构建了一些代码,比如这个

  1. 在文本框中编写网站网址,然后点击开始按钮,DataGridViews中显示匹配的数据。

  2. 我有一个6个DataGridViews。在First DataGridView中,匹配数据显示(步骤1) 然后,其他5个DataGridviews将显示为cascade引用First DataGridView行的值(webApplicationName)

  3. 代码在

    之下
    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并添加一些条件,例如[Show all]和[See Over 100GB DB]

    2. 如果我选择[See Over 100GB DB]选项,则DataGridView只显示匹配的行。

    3. 这意味着,我想使用Combobox选择过滤Datagridview,数据源已经

      绑定,所以我想不要更改DataSource ....

    4. 我尝试找到组合框和DataGridView,但通常与DataGridView中的Combobox相关....

      我怎样才能获得第一个DataGridViews的值(webApplicationName)

      请有人帮帮我..我什么都不知道......

      由于

2 个答案:

答案 0 :(得分:2)

您可以使用BindingSource将数据源绑定到DataGridView。 这样,您只需更改bindingSource的Filter属性,过滤器将自动应用于网格中显示的数据。 无需更改数据源。

答案 1 :(得分:0)

我构建了一个代码,效果很好

  1. 使用ComboBox SelectedItemChanged事件

  2. 使用DataView和DataView.RowFilter

  3. 以下代码

            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;
                }
            }