Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > DataGrid


Автор: Medved 1.11.2005, 18:34
Пример:
Код

  DataView dataView = dataSet.Tables[0].DefaultView;
  dataView.Table.Columns[0].Caption = "AAAAAAAAA"; //Так не работает
//  dataView.Table.Columns[0].ColumnName = "AAAAAAAAA"; //А так работает
  dataGrid.SetDataBinding(dataView,null);


Получается что грид отображает не свойство Caption объекта DataColumn а свойство ColumnName.
Но что-то здесь не так. Может быть кто-нибудь сможет мне объяснить, где собака зарыта?

Автор: Kurt 1.11.2005, 21:30
Ну, ежели коротко:
http://www.gotdotnet.ru/DotNet/FAQ/WindowsForms/DataGrid/314.aspx.


Автор: Medved 2.11.2005, 12:29
спасибо.

Автор: Hidrag 6.11.2005, 11:49
Нифига! Сделал все также, но не работает!!!

Код

        public WinForm()
        {
            InitializeComponent();

            dataSet.ReadXml("data.xml");

            //Создаем экземпляр стиля столбца
            DataGridTextBoxColumn tbColumn = new DataGridTextBoxColumn();
            //Указываем имя столбца к которому будет применен этот стиль
            tbColumn.MappingName = "stolbec";
            //Указываем заголовок столбца
            tbColumn.HeaderText = "number";
            //И задаем необходимую ширину
            tbColumn.Width = 50;
            //Создаем стиль таблицы, добавляя к нему стиль столбца
            DataGridTableStyle tableStyle = new DataGridTableStyle();
            tableStyle.MappingName = "katalogname";
            tableStyle.GridColumnStyles.Add(tbColumn);
            //Добавляем вновь созданный стиль к DataGrid'у
            dataGrid1.TableStyles.Add(tableStyle);

            dataGrid1.SetDataBinding(dataSet,"katalog");
        }



...а все равно dataGrid отображает все по умолчанию, стиль добавлен, а изменений никаких! Может еще что то прописать нужно?

Автор: Hidrag 10.11.2005, 10:47
Нашел я почему не привязывается стиль к гриду... оказывается нужно в tbColumn.MappingName указывать имя столбца из базы, а в tableStyle.MappingName имя таблицы, тогда работает все!

Автор: CYBERDREAM 31.8.2007, 09:27
Не пашет хоть убей. 
Код

DataGridTextBoxColumn tbColumn = new DataGridTextBoxColumn(); 
tbColumn.MappingName = "juse"; 
tbColumn.HeaderText = "headerText"; 
tbColumn.Width = 100; 
            
DataGridTableStyle tableStyle = new DataGridTableStyle(); 
tableStyle.MappingName = "tt"; 
tableStyle.GridColumnStyles.Add(tbColumn); 
            
//Добавляем вновь созданный стиль к DataGrid'у 
dg.TableStyles.Add(tableStyle);
....
data=new DataTable();
da=new MySqlDataAdapter("SELECT * FROM tt",conn);
LogIn.cb=new MySqlCommandBuilder(LogIn.da);
LogIn.da.Fill(LogIn.data);
this.dg.DataSource=LogIn.data;

В итоге ни заголовок, ни ширина столбца не изменяется. 
Пробовал и через свойства грида добавлять стили, ноль на массу, абсолютно никаких действий. В чем может быть трабла? smile 

Автор: Experimenter 31.8.2007, 18:43
Вот это работает (VBNET)
Код

        Dim MyDGridTableStyle As DataGridTableStyle
        MyDGridTableStyle = New DataGridTableStyle
        MyDGridTableStyle.DataGrid = dgrResult 'ФИШКА НОМЕР РАЗ
        MyDGridTableStyle.MappingName = "tblDep"

        Dim dgc As dgTextBox        
        dgc = New dgTextBox("HeaderText", "MappingName", "null", 30) 'заменить на нужное
        MyDGridTableStyle.GridColumnStyles.Add(dgc)       

        dgrResult = New DataGrid
        dgrResult.Location = New Point(16, 112)
        dgrResult.ParentRowsVisible = False
        dgrResult.RowHeadersVisible = False
        dgrResult.RowHeaderWidth = 15
        dgrResult.Size = New Size(683, 328)
        dgrResult.TabIndex = 0
        dgrResult.TableStyles.Add(MyDGridTableStyle) 'ФИШКА НОМЕР ДВА
        dgrResult.Anchor = AnchorStyles.Top Or AnchorStyles.Bottom Or AnchorStyles.Left Or AnchorStyles.Right
        Controls.Add(dgrResult)

диковатым кажется, стилю надо грид присвоить, а к гриду стиль добавить, но это уже за рамками моего понимания

Автор: CYBERDREAM 3.9.2007, 15:41
Увы так и не захотело. Для проверки, меняю ширину столбцов, а они так и остаются с изначальной шириной. Значит трабла в том что не добавляется стиль к гриду, но делаю  вроде все верно. Может кто сталкивался с этим, уже ноль мыслей по этому поводу, а скоро проект надобно показать.


Автор: zaver 7.9.2007, 22:25
Цитата

Получается что грид отображает не свойство Caption объекта DataColumn а свойство ColumnName.
Но что-то здесь не так. Может быть кто-нибудь сможет мне объяснить, где собака зарыта?

ну и что здесь удивительного?

Автор: CYBERDREAM 10.9.2007, 21:03
Народ, может подскажите в чем трабла? 
Мне хотя бы ширину изменить, сверху и лэйблами можно будет прикрыть, не пойму почему стили не применяются 
Код

string connect=String.Format("server=localhost;user id=root;password=root;database=gn;pooling=false;charset=cp1251");
            conn=new MySqlConnection(connect);
            conn.Open();
            //---------------------------------------
            DataGridTableStyle tableStyle = new DataGridTableStyle(); 
            tableStyle.MappingName = "tt"; 
            tableStyle.DataGrid=dg;
            //
            DataGridColumnStyle tbColumn=new DataGridTextBoxColumn();
            tbColumn.MappingName="di1";
            tbColumn.HeaderText="HEQ";
            tbColumn.Width=300;
            tableStyle.GridColumnStyles.Add(tbColumn);
            //
            DataGridColumnStyle tbColumn1=new DataGridTextBoxColumn();
            tbColumn.MappingName="di2";
            tbColumn.HeaderText="HE2";
            tbColumn.Width=300;
            tableStyle.GridColumnStyles.Add(tbColumn1);
            //
            dg.TableStyles.Add(tableStyle);
            //---------------------------------------

            data=new DataTable();
            da=new MySqlDataAdapter("SELECT * FROM tt",conn);
            cb=new MySqlCommandBuilder(da);
            da.Fill(data);
            dg.DataSource=data;


Уже нет идей никаких, а надо срочно оченью

Добавлено через 5 минут и 9 секунд
Или дайте код работающего приложения. 
В прикрепленным выше посте, проект и бэкап базы, (MySql 5.0)

Автор: Experimenter 11.9.2007, 08:25
CYBERDREAM, показалось неправильным, что стили ты объявляешь не в конструкторе, а в загрузке формы. Попробуй изменить... Если в твою форму через дизайнер залезть, то там в свойствах грида никаких стилей не объявлено. В этом и бага, подумалось мне...

Автор: zaver 11.9.2007, 13:26
юзай DataGridView и никаких проблем, там намного больше возможностей чем DataGrid и к тому же он не лагает, не зря же DateGrid убрали из .Net Framework 2.0

Автор: Experimenter 11.9.2007, 14:58
zaver, судя по скачанному примеру, у человека VS 2003 установлена.

Автор: CYBERDREAM 13.9.2007, 19:19
да верно 2003 студия, с удовольствием воспользоввался бы 2005 (там в 2 шага делается переименование кэпшионов и многое другое в гридвью), но увы проект требует именно 2003.  Решил проблему след. способом, хотя может и коряво

Код


        private void Print_Load(object sender, System.EventArgs e)
        {
            panel2.Enabled=false;
            dtable=new DataTable("names");
            dtable.Columns.Add("epc",typeof(System.String));
            dtable.Columns.Add("doc",typeof(System.String));
            
            DataSet ds=new DataSet();
            ds.Tables.Add(dtable);
            _DG.SetDataBinding(ds,"names");
            AddTableStyle();
            AddData();

        }
        private void AddData()
        {
            dtable.Clear();
            MySql.Data.MySqlClient.MySqlDataReader reader=null;
            MySql.Data.MySqlClient.MySqlCommand cmd=new MySqlCommand("SELECT * FROM printlabel ",LogIn.conn);
            reader=cmd.ExecuteReader();
            while(reader.Read())
            {
                DataRow dRow = dtable.NewRow();

                dRow["epc"] = reader.GetString(0);
                dRow["doc"] = reader.GetString(1);

                
                dtable.Rows.Add(dRow);
            }
            dtable.AcceptChanges();

        }
        private void AddTableStyle()
        {
            DataGridTableStyle dgts=new DataGridTableStyle();
            dgts.MappingName="names";

            DataGridTextBoxColumn db=new DataGridTextBoxColumn();
            dgts.RowHeadersVisible=false;
            db.MappingName="epc";
            db.Alignment=HorizontalAlignment.Center;
            db.HeaderText="Метка №";
            db.Width=150;
            dgts.GridColumnStyles.Add(db);

            db=new DataGridTextBoxColumn();
            db.MappingName="doc";
            db.HeaderText="Код";
            db.Alignment=HorizontalAlignment.Center;
            db.Width=90;
            dgts.GridColumnStyles.Add(db);
            
            _DG.TableStyles.Add(dgts);
        }


 smile  всем спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)