Click to See Complete Forum and Search --> : DataGrid problems
yoyosh
October 2nd, 2005, 07:34 AM
I will be very thankfull if you could help me by answering my questions according DataGrid:
1. Each time I fill all fields in last row, a new row is being created (automatically). How to turn this feature off? (I would like the user who wants to add new row, to press a button "new" located outside DataGrid, to add a new row ).
2. I want to allow the user to edit DataGrid (ReadOnly == false). How to get a data from the row, that has just been edited?
3. I would like to make 2 columns - one ReadOnly == false, second ReadOnly == true. I tried in such way:
DataTable dt = new DataTable("Coordinates");
this.dgPnt.DataSource = dt;
dt.Columns.Add("X");
dt.Columns[0].ReadOnly = true;
but it doesn`t seem to work.
thank you in advance for any help:)
jhammer
October 2nd, 2005, 09:02 AM
1. If your DataSource is a DataView object you can set its AllowNew property to false:
DataView dv = new DataView(myDataTable);
dv.AllowNew = false;
dataGrid1.DaatSource = dv;
If the DataSource is a DataTable, you can use its DefaultView property to set the AllowNew property:
DataTable dt = myDataSet.Tables["mytable"];
dt.DefaultView.AllowNew = false;
dataGrid1.DataSource = dt;
2. Whenever you change something in the Grid the value is automatically passed to the DataSource row when the user exit the edited row.
An alternative way is to use the CurrentCellChanged event.
3. You will need to use DataGridColumnStyles.
Little explenation about ColumnStyles and a way to learn them:
You need to use the TableStyles property of the DataGrid, which has a MappingName property (name of the table) and ColumnStyles property.
Each ColumnStyle has a MappingName property which is the name of the column you want to show.
In order to understand how to code this, I strongly suggest you use the designer, and then see what code was generated.
Add a DataGrid. In the Properties Grid look for TableStyles property. Click on the elipsis button, and you get an Editor. Add one, and set the MappingName accordingly. Click on the ColumnStyles properties, and you can add a ColumnStyle for each column you want to show. Set the mapping name for each ColumnStyle. You can also set style for each column, but I will let you investigate on that.
After you click ok look at the generated code. If you only added the columns you wanted to see, then this is what you get.
Now, each DataGridColumnStyle has a ReadOnly property.
yoyosh
October 3rd, 2005, 08:26 AM
First, thank you for help.
acording to 3) -> I tried to do everything as you said. I clicked into TableStyles and set one column with ReadOnly true and the other with false. (I can`t figure out what the mapping name is for exactly). Then I defined:
DataTable dt = new DataTable("Coordinates");
and in OnLoad method:
dt.Columns.Add("X");
dt.Columns.Add("Y");
this.dataGrid1.DataSource = dt;
still both columns are editable...
jhammer
October 4th, 2005, 03:56 AM
The following code is working:
//Initializing
dataGridTableStyle1 = new DataGridTableStyle();
dataGridTextBoxColumn1 = new DataGridTextBoxColumn();
dataGridTextBoxColumn2 = new DataGridTextBoxColumn();
dataGrid1.BeginInit();
//Creating DataSource
DataTable dt = new DataTable("MyTable");
dt.Columns.Add(New DataColumn("X",typeof(string));
dt.Columns.Add(New DataColumn("Y",typeof(string));
dataGrid1.DataSource = dt;
// dataGridTableStyle1
dataGrid1.TableStyles.AddRange(new DataGridTableStyle[] {dataGridTableStyle1});
dataGridTableStyle1.DataGrid = dataGrid1;
dataGridTableStyle1.GridColumnStyles.AddRange(new DataGridColumnStyle[] {dataGridTextBoxColumn1,dataGridTextBoxColumn2});
dataGridTableStyle1.MappingName = "MyTable"; // This is the name of the table you are binding to.
// dataGridTextBoxColumn1
dataGridTextBoxColumn1.HeaderText = "XXX"; // This is the text that is written in the Column Header. Leave empty to show the name of the column.
dataGridTextBoxColumn1.MappingName = "X"; // This is the name of the column.
dataGridTextBoxColumn1.ReadOnly = true;
dataGridTextBoxColumn1.Width = 75;
// dataGridTextBoxColumn2
dataGridTextBoxColumn2.HeaderText = "YYY";
dataGridTextBoxColumn2.MappingName = "Y"; // This is the name of the column.
dataGridTextBoxColumn2.ReadOnly = false;
dataGridTextBoxColumn2.Width = 75;
dataGrid1.EndInit();
The column with header YYY should be editable. The column with header XXX will be read-only.
yoyosh
October 4th, 2005, 12:10 PM
thank you jhammer:)
codeguru.com
Copyright Internet.com Inc., All Rights Reserved.