在線等關於DataGridView 只顯示自定義列問題


最近工作需要使用WinForm開發程序,遇到一個問題,就是在WinForm中的 DataGridView綁定時,如果查詢語句返回的是所有字段,則在DataGridView顯示的也是所有字段,沒有辦法只顯示DataGridView中定義的字段,以前用delphi和ASP.NET的時候都不是這樣,在網上找了一下,有一種辦法是綁定后,先clear(),然后再ADD各列的,但感覺這樣代碼有點多,還有其它法子可以解決問題么

問題舉例如下,有TEST表,字段有a1,a2,a3,a4
而我在DataGridView只設置a1,a3
查詢語句為select * from test

要求是查詢語句不能動,怎么可以只顯示a1,a3

18 个解决方案

#1


ms-help://MS.MSDNQTR.2003FEB.2052/vbcon/html/vbtskcreatingcustomcolumntypesindatagrid.htm

#2


System.Windows.Forms.DataGridViewTextBoxColumn ProductID = new DataGridViewTextBoxColumn();
                ProductID.DataPropertyName = "ProductID";
                ProductID.HeaderText = "產品ID";
                ProductID.Name = "ProductID";
                ProductID.Resizable = System.Windows.Forms.DataGridViewTriState.True; 

                System.Windows.Forms.DataGridViewTextBoxColumn ProductName = new DataGridViewTextBoxColumn();
                ProductName.DataPropertyName = "ProductName";
                ProductName.HeaderText = "產品名稱";
                ProductName.Name = "ProductName";
                ProductName.Resizable = System.Windows.Forms.DataGridViewTriState.True; 

                DataSet ds = (...獲取數據代碼略)
                if (ds != null)
                {
                     dataGridView1.DataSource = ds.Tables["Products"].DefaultView; 
                    dataGridView1.Columns.Clear();//一定要先綁定數據后再清除列,不然沒有效果
                    dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { ProductID });
                    dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { ProductName });
                } 

#3


那把a2,a4 的visible設置為false;

#4


VS2005 DataGridView 控件 設置自定義列

具體地址
http://www.6suv.com/20070817/4681/

#5


2樓的沒試過,正在試,3,5都是同一種方法,我在問題里已經說了不打算采用這種辦法,4的方法也不成,我只是舉例,實際可能40多列,難道要隱藏40多列

#6


2的內容目前還沒在MSDN中找到,繼續尋找中

#7


gridview設置autogeneratclumn=false.自定義列不就行了嗎?

#8


this.dataGridView1.AutoGenerateColumns = false;

#9


樓上兩位,請看一下啊,我第一句就說了是 WinForm 


WinFormWinFormWinFormWinFormWinFormWinForm啊

#10


暈死,我是剛從winform里copy出來的,還有錯嗎?

#11


DataGridView1.AutoGenerateColumns設置False,然后在設計界面上手動添加每一個要顯示的列,並設置DataPropertyName 屬性為要顯示的數據列的名稱就可以了。

#12


自己構建一個datatable做為數據源

#13


MicroDeviser(‰絔紗煙 NEТ) ,不好意思,我沒仔細看,我剛剛測試過了,這里只有你的答案是正確的,結貼給分了。

#14


都綁定上,不要的不顯示 
或者要啥綁定啥
        private void setDefaultView()
        {
            //dataGridView1.Columns.Clear();
            ////dataGridView屬性
            //dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;//選擇整行
            ////dataGridView1.RowHeadersVisible = false;//隱藏左側選擇標記列
            //dataGridView1.AllowUserToAddRows = false;//隱藏輸入行顯示
            //dataGridView1.AllowUserToDeleteRows = false;//禁止用戶從DataGridView中刪除行
            //dataGridView1.AllowUserToResizeRows = false;//禁止用戶調整行的大小
            //dataGridView1.MultiSelect = false; //禁止用戶選擇多行
            //dataGridView1.ReadOnly = true;//設置用戶只能讀取
            //dataGridView1.VirtualMode = true;//手動設置數據綁定
            //dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;//選擇整行
            ////dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;//取消單元格間的分隔線
            ////dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;//自動調整列寬
            //dataGridView1.AllowUserToOrderColumns = true;//允許用戶手動調換列的位置
            //dataGridView1.AllowUserToResizeColumns = true;//允許用戶手動調整列寬
            //dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;//可見列自動調整大小,填滿整個控件

            DAL.SchoolInfoDataSet.SchoolInfoDataTable sidt = new SchoolInfoDataSet.SchoolInfoDataTable();
            //設置列
            dataGridView1.Columns.Add("SchoolName", SchoolNmae_ColumnName);
            dataGridView1.Columns["SchoolName"].DataPropertyName = sidt.schoolnameColumn.ColumnName;

            dataGridView1.Columns.Add("SchoolSort", SchoolSort_ColumnName);
            dataGridView1.Columns["SchoolSort"].DataPropertyName = sidt.schoolsortColumn.ColumnName;

            dataGridView1.Columns.Add("Phone", Phone_ColumnName);
            dataGridView1.Columns["Phone"].DataPropertyName = sidt.phoneColumn.ColumnName;

            dataGridView1.Columns.Add("Area", Area_ColumnName);
            dataGridView1.Columns["Area"].DataPropertyName = sidt.areaColumn.ColumnName;

            dataGridView1.Columns.Add("OnlineCircs", OnlineCircs_ColumnName);
            dataGridView1.Columns["OnlineCircs"].DataPropertyName = sidt.onlinecircsColumn.ColumnName;

            dataGridView1.Columns.Add("OnlineTime", OnlineTime_ColumnName);
            dataGridView1.Columns["OnlineTime"].DataPropertyName = sidt.onlinetimeColumn.ColumnName;

            dataGridView1.Columns.Add("ContinueTime", ContinueTime_ColumnName);
            dataGridView1.Columns["ContinueTime"].DataPropertyName = "continueTime";

        }

        //綁定監控信息
        private DataTable getMappingTable()
        {
            DataTable table = new DataTable();//聲明一個Table ,用於返回綁定
            DAL.SchoolInfoDataSetTableAdapters.SchoolInfoTableAdapter sitad = new InjunctionManage.DAL.SchoolInfoDataSetTableAdapters.SchoolInfoTableAdapter();
            DAL.SchoolInfoDataSet.SchoolInfoDataTable sidt = new SchoolInfoDataSet.SchoolInfoDataTable();

            table.Columns.Add(sidt.schoolnameColumn.ColumnName, typeof(System.String));
            table.Columns.Add(sidt.schoolsortColumn.ColumnName, typeof(System.String));
            table.Columns.Add(sidt.phoneColumn.ColumnName, typeof(System.String));
            table.Columns.Add(sidt.areaColumn.ColumnName, typeof(System.String));
            table.Columns.Add(sidt.onlinecircsColumn.ColumnName, typeof(System.String));
            table.Columns.Add(sidt.onlinetimeColumn.ColumnName, typeof(System.String));
            table.Columns.Add("continueTime", typeof(System.String));

            sitad.FillAllSchoolInfoForScoutBy(sidt);
            sidt = sitad.GetAllSchoolInfoForScoutBy();
            onlinecount = 0;
            for (int i = 0; i < sidt.Rows.Count; i++)
            {
                DataRow row = table.NewRow();

                row[sidt.schoolnameColumn.ColumnName] = sidt.Rows[i][sidt.schoolnameColumn.ColumnName].ToString();
                row[sidt.schoolsortColumn.ColumnName] = sidt.Rows[i][sidt.schoolsortColumn.ColumnName].ToString();
                row[sidt.phoneColumn.ColumnName] = sidt.Rows[i][sidt.phoneColumn.ColumnName].ToString();
                row[sidt.areaColumn.ColumnName] = sidt.Rows[i][sidt.areaColumn.ColumnName].ToString();
                bool online = (bool)sidt.Rows[i][sidt.onlinecircsColumn];
                if (online)
                {
                    row[sidt.onlinecircsColumn.ColumnName] = "在線";
                    row[sidt.onlinetimeColumn.ColumnName] = sidt.Rows[i][sidt.onlinetimeColumn.ColumnName];
                    TimeSpan ts = DateTime.Now.Subtract(DateTime.Parse(sidt.Rows[i][sidt.onlinetimeColumn.ColumnName].ToString()));
                    int hour = ts.Days * 24 + ts.Hours;
                    string time = hour.ToString() + "小時" + ts.Minutes.ToString() + "分";
                    row["ContinueTime"] = time;
                }
                else
                {
                    row[sidt.onlinecircsColumn.ColumnName] = "離線";
                    row[sidt.onlinetimeColumn.ColumnName] = null;
                    row["ContinueTime"] = null;
                    onlinecount+=1;
                }


                table.Rows.Add(row);
            }
            return table;
        }

#15


DataTable a = new DataTable();
            //添加列
            DataColumn dc = new DataColumn("列名1", typeof(string));
            a.Columns.Add(dc);
            //添加行
            DataRow b = new DataRow();
            b["列名1"] = "值";
            a.Rows.Add(b);

#16


強,哈哈,就一句話,我搞了半天了都沒找到,汗~~~~

#17


this.dataGridView1.AutoGenerateColumns   =   false;   正解

#18


我 。。的  我怎么沒在winform設計界面找到  AutoGenerateColumns 這個屬性  ,但是在代碼界面里有,怎么回事啊 

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com