|
AFAIK the SortIcon (I assume that you mean the little triangle thingy) only appears on columns that are sorted. If you want it to appear for all columns you will have to Sort the DataGridView in the Form_Load event handler and sort it on all columns. The problem is the built in Sort routines only cater for sorting on one column.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
I've tried googling this although I'm not exactly sure how to ask google what I'm trying to do, heh.
I have a databound form that displays 2 different types of business objects (they inherit from the same base class). I would like the form controls to change depending on the type of object the form is displaying.
I suppose I can redesign the form at runtime depending on which object I'm displaying although something tells me this might not be the most efficient way to do this.
If there is some major concept I'm missing here please point me in the right direction, I can probably figure it out from there. I've only been working with C#/.net for 6 weeks so there are surely plenty of things I don't yet know.
|
|
|
|
|
This become a design issue, I assume there is a bunch of data in the base class and different data in the other classes. I would split the form into 3 panels, the subclass will determine which one is displayed. I usually design them side by side and move the visible on into position at runtime.
|
|
|
|
|
so essentially I just change the visibility property of my container? Thats going to be rather messy in the designer eh?
|
|
|
|
|
Sure, that's why I double the width of the form and make the adjustment and visibility immediately after InitializeComponent is called in the constructor.
I don't really care what the designer looks like - it is the runtime that I want to be good. I have one form where I use 5 such panels and have to use bringtofront in the designer to work with them, a complete PITA but the users don't know.
|
|
|
|
|
You can make the class specific UI portion into seperate forms or user controls, ie FormA for displaying ClassA object, FormB for displaying ClassB object.
A main form to display your common fields, in the main form a container (panel) shall hold either FormA or FormB, depending on the conditions that you want.
If it's ClassA, create an instance of FormA, and put it into the container (panel), call the necessary object passing and binding on FormA, vice versa for ClassB.
That way you don't need to mess around all the controls on the main form.
To put a form into a panel
formA.TopLevel = false;
formA.Dock = DockStyle.Fill;
formA.FormBorderStyle = FormBorderStyle.None;
panel1.Controls.Add(formA);
formA.Show();
|
|
|
|
|
yep. that's what I sometimes do in such cases.
The alternative is designing Panels, not Forms.
That takes less property settings to get it working.
|
|
|
|
|
Oi, that's cheating, I had not thought to use a form as a sub control. That will make the development much simpler. Have another 5
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
darkelv wrote: To put a form into a panel
Hi Darkelv,
Fascinating !
I don't think I've ever put a Form inside a Panel, although I've certainly put Forms inside Forms (and a pet peeve is that a Form placed inside a Form doesn't automatically stay in the bounds of the Parent Form, although once you've written code to handle that (as I have [or created your own sub-classed Form where 'staying inside the Parent' is implemented]), you can just re-use that code).
I'm very curious as to what you think the strategic advantages of putting a Form in a panel (compared to a UserControl, or another Panel) would be; what type of scenario would this add value to.
Appreciate your thoughts.
best, Bill
"Many : not conversant with mathematical studies, imagine that because it [the Analytical Engine] is to give results in numerical notation, its processes must consequently be arithmetical, numerical, rather than algebraical and analytical. This is an error. The engine can arrange and combine numerical quantities as if they were letters or any other general symbols; and it fact it might bring out its results in algebraical notation, were provisions made accordingly." Ada, Countess Lovelace, 1844
|
|
|
|
|
Hi Bill,
You can set the form's dock to Fill when putting Form inside Form's Control property, for auto fitting in the parent form.
One advantage is you can easily change your presentation from one way to another, for example from above, instead of putting FormA or FormB in panel, you can easily change it to show FormA or FormB as popup forms.
Also, I can easily test the form without needing to create a form to host the user control or panel, wire up all the events, etc.
Though using Form, the application may get a bit heavier.
|
|
|
|
|
This is a rant not a question.
I have 2 DGVs with approx 1000 rows each on a single form, each has 14 columns and I need to format the alignment and text of the last 6 columns.
I created this utility event that uses the cell format event to set the alignment based on the columns underlying data type (ValueType) and assigned it to both grids. Performance is not good, there is an appreciable delay when loading and filtering the grids, about 3-5 seconds
public static void dgCellFormat(object sender, DataGridViewCellFormattingEventArgs e)
{
DataGridViewColumn oCol = (sender as DataGridView).Columns[e.ColumnIndex];
string vt = oCol.ValueType.ToString().ToLower();
switch (vt)
{
case "system.int32":
case "system.int16":
case "system.int64":
e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
if (!oCol.HeaderText.EndsWith("ID"))
{
e.CellStyle.Format = "#,#";
}
break;
case "system.decimal":
e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
if (!oCol.HeaderText.EndsWith("ID"))
{
e.CellStyle.Format = "#,#.00";
}
break;
case "system.datetime":
e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
break;
}
}
So I thought if cell formatting is slow then formatting the columns defaultcellstyle should be better performance. WRONG , setting the defaultcellstyle instead of cellformatting resulted in a delay of approx 50 seconds when loading. I suppose b/c the grid formats all the data instead of just the data on display.
[edit] Thanks to comments from darklev I moved the above formatting into the column creation process, removing the AutoGenerate columns and formatting the columns to meet my requirements. Work perfectly without the overhead. [/edit]
Last modified: 123hrs 51mins after originally posted --
|
|
|
|
|
Are you using AutoGenerateColumn=true?
Why not define the columns as what you would like, before populating the data onto the DataGridView?
|
|
|
|
|
This is a generic tool, take any DGV and any datatable and throw them together pass the result through this and you get a well formatted result. Customising a DGV for a specific datatable is not the goal, that way lies WPF.
I loathe coding twice, so I often (nearly always) build a utility method that will service the bulk of my requirements. Then in the few time it needs tweaking I do the custom formatting. As an example I had almost forgotten how to bind a data control, I have had a utility that does it since dotnet 1.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
What I meant was before you assigned the dataset to the datagridview, build the columns base on your existing logic, versus look at each cell's data type and set the alignment for that cell(you are repeating this 1000 times or how many rows in the data table).
It can still be generic to the data type of each column.
After all, each column will have a specific data type, there's no point to do the alignment on every cell/row.
|
|
|
|
|
darkelv wrote: you are repeating this 1000 times or how many rows in the data table
Your logic is impeccable - it matches mine precisely. So I set the format of the columns using the defaultcellstyle - this takes an order order of magnitude longer than setting the cell formats. This is the basis of my rant!
Actually I think you will find it is doing it for the 100 or so cells that are currently on display.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
Nevermind, you are not getting it..
You can define the columns _once_, before populating the datagridview with data.
|
|
|
|
|
Ah click, I've been binding the DGV, then changing the columns, and paying the price. So get the table, define the columns based on the table and then bind the datatable. Oh bloody hell, my utils does this it just doesn't do the datatype formatting - stupid frikking twat
Thank you
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
As we can create Regions in code like
#Region "1).Declarations"
Dim con As SqlConnection
end region
similarly can we make sub blocks or sub regions with in a region
Best Of regards,
Softdev
Best Of Regards,
SOFTDEV
Sad like books with torn pages, sad like unfinished stories ...
|
|
|
|
|
The easiest way to resolve a question like this is to try it.
What can it break?
Be brave!
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
yes could not find any sub blocks with in regions did u try and found something
Best Of Regards,
SOFTDEV
Sad like books with torn pages, sad like unfinished stories ...
|
|
|
|
|
AFAIK you can nest #region/#end region blocks several layers deep. Not sure if there is a limit.
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
thanks i got it v can
Best Of Regards,
SOFTDEV
Sad like books with torn pages, sad like unfinished stories ...
|
|
|
|
|
But how ca we make regions in Function Bodies
Best Of Regards,
SOFTDEV
Sad like books with torn pages, sad like unfinished stories ...
|
|
|
|
|
Hello,
I'm developing a simple text highlighting editor, and I can't disable scroll bars when I call the Select(int start, int length) method of the RTB, for example The cursor is on the 40th line and I want to select an expression at line 1 and do something on that, but doing this causes the RTB to scroll to the first line and so this is considered a bug !
can anyone help me ??
Thanks,
ashkan s.
|
|
|
|
|
Is not this its default behavior which i have doubt that you can change , try to work on your selection of expression thing code it will be more better and prospective then to this scroll bar thing
Best Of Regards,
SOFTDEV
Sad like books with torn pages, sad like unfinished stories ...
|
|
|
|