我要做一个库存查询功能 我想对我查询出来的数据 进行一个过滤  把库存量为0的那一条数据给隐藏掉 
我在窗体上 弄了个CheckBox控件来 在CheckBox控件的单击事件里实现这个效果 代码如下private void ckb_ShangPinCheck_Click(object sender, EventArgs e)
        {
            DataView dv = new DataView(tab);
            if (ckb_ShangPinCheck.Checked)
            { 
                dv.RowFilter= "库存量>0";
            }
            else
            {
                dv.RowFilter = "true";
            }
        }
可是执行了后没反应 本来我是没有转成 DataView的 如果直接DataTable来过滤的话 过滤是可以 但是 后续的问题好麻烦 因为多次点击后我的数据绑定控件会变下面提供相关的代码:private void Frm_Select_CangKu_Load(object sender, EventArgs e)//窗体加载事件
        {
            Query_CangKu(1);
        }
void Query_CangKu(int index)//这是执行绑定的方法
        {
            if (index == 1)
            {
                tab = bll_CangKu.Query_CangKu_BHMC("1", "", "", "");
                if (tab.Rows.Count != 0)
                {
                    if (tab.Rows.Count < 15)
                    {
                        int count = tab.Rows.Count;
                        for (int i = 0; i < (15 - count); i++)
                        {
                            tab.DefaultView.AddNew();
                        }
                        this.Dgdv_CangKu.DataSource = tab.DefaultView;
                    }
                    else
                    {
                        this.Dgdv_CangKu.DataSource = tab.DefaultView;
                    }
                }
                else
                {
                    for (int i = 0; i < 25; i++)
                    {
                        tab.DefaultView.AddNew();
                    }
                    this.Dgdv_CangKu.DataSource = tab.DefaultView;
                }
            }
            else
            {
                try
                {
                    if (cmb_CangKu.SelectedIndex == 0 && txt_Type.Text == "所有类别" && txt_BH_MC.Text == string.Empty)
                    {
                        tab = bll_CangKu.Query_CangKu_BHMC("1", "", "", "");
                    }
                    else if (cmb_CangKu.SelectedIndex != 0 && txt_Type.Text == "所有类别" && txt_BH_MC.Text == string.Empty)
                    {
                        tab = bll_CangKu.Query_CangKu_BHMC("1", cmb_CangKu.SelectedValue.ToString(), "", "");
                    }
                    else if (cmb_CangKu.SelectedIndex == 0 && txt_Type.Text != "所有类别" && txt_BH_MC.Text == string.Empty)
                    {
                        tab = bll_CangKu.Query_CangKu_BHMC("1", "", TypeID, "");
                    }
                    else if (cmb_CangKu.SelectedIndex == 0 && txt_Type.Text == "所有类别" && txt_BH_MC.Text != string.Empty)
                    {
                        tab = bll_CangKu.Query_CangKu_BHMC("1", "", "", txt_BH_MC.Text.Trim().ToString());
                    }
                    else if (cmb_CangKu.SelectedIndex == 0 && txt_Type.Text != "所有类别" && txt_BH_MC.Text != string.Empty)
                    {
                        tab = bll_CangKu.Query_CangKu_BHMC("1", "", TypeID, txt_BH_MC.Text.Trim().ToString());
                    }
                    else if (cmb_CangKu.SelectedIndex != 0 && txt_Type.Text != "所有类别" && txt_BH_MC.Text == string.Empty)
                    {
                        tab = bll_CangKu.Query_CangKu_BHMC("1", cmb_CangKu.SelectedValue.ToString(), TypeID, "");
                    }
                    else if (cmb_CangKu.SelectedIndex != 0 && txt_Type.Text != "所有类别" && txt_BH_MC.Text != string.Empty)
                    {
                        tab = bll_CangKu.Query_CangKu_BHMC("1", cmb_CangKu.SelectedValue.ToString(), TypeID, txt_BH_MC.Text.Trim().ToString());
                    }
                    else if (cmb_CangKu.SelectedIndex != 0 && txt_Type.Text == "所有类别" && txt_BH_MC.Text != string.Empty)
                    {
                        tab = bll_CangKu.Query_CangKu_BHMC("1", cmb_CangKu.SelectedValue.ToString(), "", txt_BH_MC.Text.Trim().ToString());
                    }
                    if (tab.Rows.Count != 0)
                    {
                        if (tab.Rows.Count < 15)
                        {
                            int count = tab.Rows.Count;
                            for (int i = 0; i < (15 - count); i++)
                            {
                                tab.DefaultView.AddNew();
                            }
                            this.Dgdv_CangKu.DataSource = tab.DefaultView;
                        }
                        else
                        {
                            this.Dgdv_CangKu.DataSource = tab.DefaultView;
                        }
                    }
                    else
                    {
                        for (int i = 0; i < 15; i++)
                        {
                            tab.DefaultView.AddNew();
                        }
                        this.Dgdv_CangKu.DataSource = tab;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString(), "系统提示");
                }
            }
        }请路过的高手们 帮忙解决下这个问题 谢谢了 在线等

解决方案 »

  1.   

                    dv.RowFilter= "库存量>0";这样应该可以吧?
     
    这个可能不行,清空应该就可以了
                    dv.RowFilter = "true";
                    dv.RowFilter = "";
      

  2.   

    弄一个Form
    拉上来一个控件DataGridView和一个CheckBox
    声明一个全局的DataTable对象private DataTable dt = null;
    在FormLoad的时候写如下代码
    dt = new DataTable();
    dt.Columns.Add("test1");
    dt.Columns.Add("test2");
    dt.Columns.Add("test3");
    for (int i = 0; i < 10; i++)
    {
        DataRow row = dt.NewRow();
        row["test1"] = "test1" + i;
        dt.Rows.Add(row);
    }
    DataView dv = new DataView(dt);
    this.dataGridView1.DataSource = dv;然后在CheckBox的CheckedChanged事件中写下如下代码
    DataView dv = new DataView(dt);
    if (this.checkBox1.Checked)
    {
        dv.RowFilter = "test1 > 'test13'";
    }
    this.dataGridView1.DataSource = dv;好了,你可以测试了~~~另外你还可以使用DataTable的Select方法
    不过这个方法返回的是DataRow[]
    你可以这样
    DataRow[] rows = dt.Select("你的条件");
    DataTable table = dt.Clone();
    foreach(DataRow in rows)
    {
        table.ImportRow(row);
    }
    然后把table绑定到控件就可以了
    你只要记住,原来的数据源不要去改变,就可以了~~~
      

  3.   

    或者上面CheckedChanged的代码可以写成如下
    DataView dv = this.dataGridView1.DataSource as DataView;
    if (this.checkBox1.Checked)
    {
        dv.RowFilter = "test1 > 'test13'";
    }
    else
    {
        dv.RowFilter = "";
    }
      

  4.   

    private void ckb_ShangPinCheck_Click(object sender, EventArgs e)
            {
                DataView dv = tab.DefaultView;   //与GridView绑定的DataView
                if (ckb_ShangPinCheck.Checked)
                { 
                    dv.RowFilter= "库存量>0";
                }
                else
                {
                    dv.RowFilter = "true";
                }
            }
      

  5.   

    你搜素得到的ds
    ds.Tables[0].Select("库存量>0");
      

  6.   

    lovefootball的方法可以DataRow[] rows = dt.Select("你的条件"); 
    DataTable table = dt.Clone(); 
    foreach(DataRow in rows) 

        table.ImportRow(row); 

    比用其他方法都要好 现在就是隐藏了后啊 因为我只有拿1条数据做测试  我的DataGridView控件会只剩下标题 我在绑定的时候 就是为了防止出现这种情况 在绑定之前就先判断了Count 如果少于15条 就通过循环添加空白行if (tab.Rows.Count != 0)
                        {
                            if (tab.Rows.Count < 15) 如果数据少月15条
                            {
                                int count = tab.Rows.Count;
                                for (int i = 0; i < (15 - count); i++)就循环添加空白数据项 
                                {
                                    tab.DefaultView.AddNew();
                                }
                                this.Dgdv_CangKu.DataSource = tab.DefaultView;
                            }
                            else
                            {
                                this.Dgdv_CangKu.DataSource = tab.DefaultView;
                            }
                        }
                        else
                        {
                            for (int i = 0; i < 15; i++)
                            {
                                tab.DefaultView.AddNew();
                            }
                            this.Dgdv_CangKu.DataSource = tab;
                        }这样就不会使窗体太难看 始终有网格存在 这样更美观一些
      

  7.   

    用FOREACH遍历datatable的每一行吧
      

  8.   

    private void ckb_ShangPinCheck_Click(object sender, EventArgs e)
            {
                DataView dv = tab.defaultview;
                if (ckb_ShangPinCheck.Checked)
                { 
                    dv.RowFilter= "库存量>0";
                }
                else
                {
                    dv.RowFilter = "";
                }
                //再进行绑定,
            }
      

  9.   

    呵呵 终于被我自己给解决了 谢谢大家的参与 我把我的解决方法贴出来 大家看下  private void ckb_ShangPinCheck_Click(object sender, EventArgs e)
            {
                if (ckb_ShangPinCheck.Checked)
                {
                    DataRow[] rows = tab.Select("库存量>0");
                    DataTable table = tab.Clone();
                    foreach (DataRow row in rows)
                    {
                        table.ImportRow(row);
                    }
                    if (table.Rows.Count > 0)
                    {
                        if (table.Rows.Count < 20)
                        {
                            int count = table.Rows.Count;
                            for (int i = 0; i < (20 - count); i++)
                            {
                                table.DefaultView.AddNew();
                            }
                            this.Dgdv_CangKu.DataSource = table.DefaultView;
                        }
                        else
                        {
                            this.Dgdv_CangKu.DataSource = table.DefaultView;
                        }
                    }
                    else
                    {
                        for (int i = 0; i < 20; i++)
                        {
                            table.DefaultView.AddNew();
                        }
                        this.Dgdv_CangKu.DataSource = table.DefaultView;
                    }
                }
                else
                {
                    this.Dgdv_CangKu.DataSource = tab;
                }
            }效果是实现了 而且感觉还不错 但是大家如果有更好的实现方法 就一定要告诉我哦