首先将一个数据源绑定到这个控件中,
GridMzPzQuery.DataSource=ds.tables[0];
如何将重新绑定到另一个表中如:
GridMzPzQuery.DataSource=ds.tables[1];
这2个表的结构不同,这时GridMzPzQuery显示的还是上一张表的结构,如何能清除上一次的表结构,然后重新绑定一个新的数据源。

解决方案 »

  1.   

    gridControl1.MainView.Dispose();
                gridView1 = new GridView(gridControl1);
                gridControl1.MainView = gridView1;            gridControl1.DataSource = dt;
                gridControl1.ForceInitialize();
      

  2.   

    gridControl1.MainView.Dispose();
                gridView1 = new GridView(gridControl1);
                gridControl1.MainView = gridView1;            gridControl1.DataSource = dt;
                gridControl1.ForceInitialize();
      

  3.   

    重新绑定,GridMzPzQuery.Refresh();
      

  4.   

    我是根据用户的查询条件,显示不同的结果:
    dt是数据表,ds是结果集(dataset)
    这此表都经检查有数据:
    switch (lx)
                    {                    case 1:
                            LblQueryName.Text = hzname.Substring(0, hzname.IndexOf(';'));
                            LblQuerylsh.Text = dt.Rows[0]["invoiceid"].ToString();
                            LblQueryPzh.Text = dt.Rows[0]["invoicenum"].ToString();
                            LblQueryLX.Text = GetHZLX(dt.Rows[0]["bxtypeid"].ToString());
                            LblQueryDepdes.Text = dt.Rows[0]["depdes"].ToString();
                            LblQueryDoc.Text = dt.Rows[0]["personna"].ToString();
                            LblQueryRevDate.Text = dt.Rows[0]["revdate"].ToString();
                            LblQueryFootDate.Text = dt.Rows[0]["footdate"].ToString();
                            LblQueryDelDate.Text = dt.Rows[0]["parkdate"].ToString();
                            LblQueryOperNa.Text = dt.Rows[0]["operna"].ToString();
                            GridMzPzQuery.DataSource = ds.Tables[1];
                            GridMzPzQuery.MainView.RefreshData ();
                            gridView8.Columns[0].Width = 130;
                            gridView8.Columns[1].Width = 250;
                            gridView8.Columns[2].Width = 90;
                            gridView8.Columns[3].Width = 90;
                            gridView8.Columns[4].Width = 90;
                            decimal money = 0.00M;
                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                money = Convert.ToDecimal(dt.Rows[i]["revprice"]) + money;
                            }
                            LblQueryMoney.Text = string.Format(money.ToString(), "0.00");
                            if (ds.Tables[2].Rows.Count == 0)
                            {
                                LblQueryYBgr.Text = string.Empty;
                                LblQueryYBzh.Text = string.Empty;
                            }
                            else
                            {
                                LblQueryYBgr.Text = ds.Tables[2].Rows[0]["ybpersonprice"].ToString();
                                LblQueryYBzh.Text = ds.Tables[2].Rows[0]["ybaccount"].ToString();
                                LblQueryName.Text = ds.Tables[2].Rows[0]["name"].ToString();
                            }
                            break;
                        case 2:                        LblQueryName.Text = hzname.Substring(0, hzname.IndexOf(';'));
                            LblQuerylsh.Text = dt.Rows[0]["reginum"].ToString();
                            LblQueryPzh.Text = LblQuerylsh.Text;//dt.Rows[0]["invoicenum"].ToString();
                            LblQueryLX.Text = "自费";// GetHZLX(dt.Rows[0]["bxtypeid"].ToString());
                            LblQueryDepdes.Text = dt.Rows[0]["depdes"].ToString();
                            LblQueryDoc.Text = dt.Rows[0]["typedes"].ToString();
                            LblQueryRevDate.Text = dt.Rows[0]["regidate"].ToString();
                            LblQueryFootDate.Text = dt.Rows[0]["footdate"].ToString();
                            LblQueryDelDate.Text = dt.Rows[0]["parkdate"].ToString();
                            LblQueryOperNa.Text = dt.Rows[0]["operna"].ToString();
                            LblQueryMoney.Text = dt.Rows[0]["金额"].ToString();
                            
                            GridMzPzQuery.DataSource = dt;
                            
                            gridView8.Columns[0].Visible = false;
                            gridView8.Columns[1].Visible = false;
                            gridView8.Columns[2].Visible = false;
                            gridView8.Columns[3].Visible = false;
                            gridView8.Columns[4].Width = 90;
                            gridView8.Columns[5].Width = 90;
                            gridView8.Columns[6].Width = 90;
                            gridView8.Columns[7].Width = 90;
                            gridView8.Columns[8].Visible = false;
                            gridView8.Columns[9].Visible = false;
                            gridView8.Columns[10].Visible = false;
                            gridView8.Columns[11].Visible = false;
                            gridView8.Columns[12].Visible = false;
                            break;
                        default:
                            break;
                    }由于查询结果表的结构不同,在查询第一项后再查第二项就报索引超出的错误,
      

  5.   

    太复杂了,建两个gridview,切换数据源的同时切换gridcontrol.mainview
      

  6.   

    然后再
    GridMzPzQuery.DataSource=ds.tables[1];
      

  7.   

    private void ClearGrid(DataTable dt,int lx)
            {
                GridMzPzQuery.MainView.Dispose();
                DevExpress .XtraGrid.Views .Grid.GridView   g8 = new GridView(GridMzPzQuery);
               g8.Appearance.GroupPanel.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
                g8.Appearance.GroupPanel.Options.UseFont = true;
                g8.Appearance.GroupPanel.Options.UseTextOptions = true;
                g8.Appearance.GroupPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
                g8.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;
                g8.GridControl = this.GridMzPzQuery;
                g8.GroupPanelText = "票据收费明细表";
                g8.Name = "g8";
                g8.OptionsBehavior.CacheValuesOnRowUpdating = DevExpress.Data.CacheRowValesMode.Disabled;
                g8.OptionsBehavior.Editable = false;
                g8.OptionsCustomization.AllowColumnMoving = false;
                g8.OptionsCustomization.AllowColumnResizing = false;
                g8.OptionsCustomization.AllowFilter = false;
                g8.OptionsCustomization.AllowGroup = false;
                g8.OptionsCustomization.AllowSort = false;
                g8.OptionsFilter.AllowFilterEditor = false;
                g8.OptionsMenu.EnableColumnMenu = false;
                g8.OptionsMenu.EnableFooterMenu = false;
                g8.OptionsMenu.EnableGroupPanelMenu = false;
                g8.OptionsSelection.EnableAppearanceFocusedCell = false;
                g8.OptionsView.ColumnAutoWidth = false;
                GridMzPzQuery.MainView = g8;
                GridMzPzQuery.DataSource = dt;
                GridMzPzQuery.ForceInitialize();
                GridMzPzQuery.RefreshDataSource();
                GridMzPzQuery.Refresh();
                switch (lx)
                {
                    case 1:
                        g8.Columns[0].Width = 130;
                        g8.Columns[1].Width = 250;
                        g8.Columns[2].Width = 90;
                        g8.Columns[3].Width = 90;
                        g8.Columns[4].Width = 90;
                        break;
                    case 2:
                        g8.ClearGrouping();
                        //GridMzPzQuery.MainView.RefreshData();
                        //GridMzPzQuery.ForceInitialize();
                        g8.Columns[0].Visible = false;
                        g8.Columns[1].Visible = false;
                        g8.Columns[2].Visible = false;
                        g8.Columns[3].Visible = false;
                        g8.Columns[4].Width = 90;
                        g8.Columns[5].Width = 90;
                        g8.Columns[6].Width = 90;
                        g8.Columns[7].Width = 90;
                        g8.Columns[8].Visible = false;
                        g8.Columns[9].Visible = false;
                        g8.Columns[10].Visible = false;
                        g8.Columns[11].Visible = false;
                        g8.Columns[12].Visible = false;
                        break;
                    default:
                        break;
                }
            }
    结合各位的指点,终于解决了,这个控件如此简单的问题这么复杂,不知各位还有什么方法,明天结账,谢谢各位了!
      

  8.   

    没必要那么复杂
    gridView1.Columns.Clear();
    gridControl1.DataSource = MsgContainer.Instance.GetDTULoadPara(this.paraDTUID.Text);
    this.gridControl1.ForceInitialize();
    this.gridControl1.RefreshDataSource();
    this.gridControl1.Refresh();
      

  9.   

    我也遇到了这问题,事实上用this.gridControl1.DataSource = null; 就搞定了。  
    this.gridView1.ClearColumnsFilter();                        
    加上这个清除过滤条件就更好了。
      

  10.   

    再补充一下,如果是字段也变了,那就要加一条gridView1.Columns.Clear(); DataSet myDs = new DataSet();
                    myDs.Clear();
    gridView1.Columns.Clear();
    ……