We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. Image for the cookie policy date
close icon

Colwidth and extra space on scrolled to right grid

Hey Im having a problem getting rid of the DEAD space at the right of my grid. I thought we had this down to a calculation by taking the number of columns u want displayed without scrolling times each one of those cols width. then u add in the col header width and add 18. thats how big we have figured out the grid needs to be width wise for no dead space on the right when its scrolled all the way to the right. i''ve recently started doing forms where say the first col is a diff width then the other say 32 in this example i am sending. using that calculation i can never get rid of the dead space at the right. so we''ve figured out that its because of having one col width diff then the others. Why?? So we had the idea of freezing that header cell and that seems to fix the problem but introduces another. if u run my sample u will notice the dead space at the right when u scroll. if u uncomment out the frozen line in the load paragraph u will notice the dead space is gone but u will aslo now notice that the right line of col 1 that is separting it and col 2 has been changed to BLUE. now in testing we''ve decided we make like that first col frozen anyway which fixes the dead space but we dont like the blue line. so can u tell me why the blue line is happening and what i can do to fix it and why if i dont want to use frozen why cant i ever get rid of dead space on a grid where one cell width of a col might be diff then every other col width size Thanks Phil colwidthtest_779.zip

11 Replies

AD Administrator Syncfusion Team October 12, 2004 06:34 PM UTC

Hi Phil, try the following lines of code: Me.grdSC_GSC.Model.Cols.FrozenCount = 1 Me.grdSC_GSC.Model.ColStyles(1).Borders.Right = New GridBorder(GridBorderStyle.Solid, Me.grdSC_GSC.Model.Properties.FixedLinesColor) Me.grdSC_GSC.HScrollPixel = True Stefan


PB Philip Bishop October 13, 2004 10:00 AM UTC

Ok that didnt work. Its still blue and that code u had me try also made it scroll kinda funny as opposed to not adding those extra lines. Whats going on with this, and how can i fix it BOTH ways. Meaning having it frozen and no blue line and not having it frozen and NOT having the dead space at the right???????


AD Administrator Syncfusion Team October 13, 2004 03:42 PM UTC

I am having trouble seeing the behavior in your samples. I get exceptions trying to load the colwidths you have saved using the designer, so I only can see the defaults. The only thing I can see is the extra thick fixed line where you have the frozen column. Here is code that displays a standard grid line for me in your sample at that point. Me.grdSC_GSC.Model.Cols.FrozenCount = 1 ''get the color you are using for your gridlines Dim lineCol As Color = Me.grdSC_GSC.Properties.GridLineColor Me.grdSC_GSC.Properties.FixedLinesColor = Color.FromArgb(0, Color.Red) Me.grdSC_GSC.Model.ColStyles(1).Borders.Right = New GridBorder(GridBorderStyle.Solid, lineCol) If you can resend your sample without setting any colwidths in the designer, maybe I can see your exact problem and offer a better suggestion.


AD Administrator Syncfusion Team October 13, 2004 03:48 PM UTC

Hi Phil, this is the complete code for Form_Load Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.grdSC_GSC.Model.CutPaste.ClipboardFlags += GridDragDropFlags.NoAppendRows + GridDragDropFlags.NoAppendCols - GridDragDropFlags.Styles Me.grdSC_GSC.Model.RowHeights(0) = 50 Me.grdSC_GSC.Model.ColWidths(0) = 75 Dim i, j As Integer For i = 1 To 128 For j = 2 To 32 grdSC_GSC(i, j).CellValue = 201 + i Next Next Dim showFrozen As Boolean = True If showFrozen Then '' Show a frozen line without a blue border (explicitly turning off that border below) Me.grdSC_GSC.Model.Cols.FrozenCount = 1 Me.grdSC_GSC.Model.ColStyles(1).Borders.Right = New GridBorder(GridBorderStyle.Solid, Me.grdSC_GSC.Model.Properties.GridLineColor) Me.grdSC_GSC.HScrollPixel = True Else '' Show no frozen line Me.grdSC_GSC.Model.Cols.FrozenCount = 0 Me.grdSC_GSC.HScrollPixel = True End If grdSC_GSC.Visible = True End Sub You can toggle the showFrozen variable in order to show or not show frozen columns. A key line in the code above is usage of horizontal pixel scrolling. This lets the grid ensure no grey area will be displayed after the last column. I also attached form1.vb with my changes. Stefan Form1_6214.zip


PB Philip Bishop October 13, 2004 04:04 PM UTC

Ok I cant make it happen on a new form. Thats why i sent you one of the like 10 that are similar that its doing it on. I have colwidth set to 70 in col one and then 95 in all the other cols..so i set thet default width to 95 then go back and change the one col width in col1 to 70. I am attaching a picture of what i see. If you cant make this work, can u tell me how i can get rid of the dead space on the right when u have one col width diff then the others?? we could probably live with that. i will work on getting a new grid and going line by line and making sure the values are the same as the one i sent you. Screen02_1939.zip


PB Philip Bishop October 13, 2004 04:13 PM UTC

ok im attaching another grid where i reset all the default col widths and it still does it. i just noticed a sample from stefan now as i was posting this that must of came right after clays message. im going to look in to his response now let me know if u see it here on this one colwidthtest1_8210.zip


PB Philip Bishop October 13, 2004 04:34 PM UTC

ok so in further testing of stefans last post it seems to fix the problem both ways. however when u are freezing the colum u DONT want to use that hscrollpixel=true line. thats the line i just figured out is the line that causes it to scroll funny when u have a frozen header. Ok so my last question i guess is what does that hscrollpixel=true do? How does that prevent me from having dead space on the right and does that always hold true that it will always kill the dead space on the right?? Like i said in the past we''ve always just added up the displayed col width sizes and the header col width size and then added 18 and it worked. what does that do?


AD Administrator Syncfusion Team October 13, 2004 07:05 PM UTC

Setting HPixelScroll = true allows the grid to scroll pixel by pixel (as opposed to column by column). This means it is not required that the left most scrollable column is not required to be fully visible and that the right most column will end exactly at the right edge of the grid''s client area. Without pixel scrolling, the scrollable width of the grid (the clientarea.width) must always be exactly the width of the last few visible columns (the exact number depends upon the number of columns). If you are off by a pixel, you see the extra space because the left most column must be fully visible without the pixel scrolling. If you do not want to use the pixel scrolling, another solution is to handle the QueryColWith event. In that event, when e.Index is the last column, then set e.Size to be the exact number of pixels to fill the cleintarea.width.


AD Administrator Syncfusion Team October 13, 2004 07:19 PM UTC

Here is a handler that seems to work in your sample without the pixel scrolling sample.
Private Sub grdSC_GSC_QueryColWidth(ByVal sender As Object, ByVal e As Syncfusion.Windows.Forms.Grid.GridRowColSizeEventArgs) Handles grdSC_GSC.QueryColWidth
        If e.Index = Me.grdSC_GSC.ColCount Then
            Dim w As Integer = Me.grdSC_GSC.ColWidths.GetTotal(0, Me.grdSC_GSC.Cols.FrozenCount) + Me.grdSC_GSC.ColWidths.GetTotal(Me.grdSC_GSC.LeftColIndex, Me.grdSC_GSC.ColCount - 1)
            e.Size = Math.Max(0, Me.grdSC_GSC.ClientSize.Width - w)
            e.Handled = True
        End If
    End Sub


PB Philip Bishop November 10, 2004 01:11 PM UTC

Ok all of the above u gave me was working fine. Just lately a tester noticed something and wanted to know if it could be fixed. The sample im attaching which is the same sample i had in above post with only one line change to get rid of the BLUE it seems to have a problem now scrolling. The issue is when u grab hold of the first cell with ur mouse and then try and drag to the right with the mouse to select the row. When u do this u will notice that it stops at the last visible col on the screen and wont let u select past that. If u click on the cell and then hold down ur shift key and arrow over it will let u go past this col and select all of the data. This has only started happening after we added the frozen count to freeze that first col. Any reason why i can select all the row with the shift and the keyboard but i cant with the mouse?? colwidthtest3_4633.zip


AD Administrator Syncfusion Team November 12, 2004 07:48 AM UTC

This is by design. There is explicit code in the selection mouse controller that does not allow you to auto scroll if the selections start in a frozen cell. The thought is that if you scroll in this situation, you will no longer display contiguous selected cells (and if the selection actually begin with the grid scrolled, you user. Here is the code in GridDragSelectMouseController.LefMouseDown.
if (hitTestInfo.colSelected && !Grid.InternalIsFrozenCol(colIndex))
{
	dx = Grid.ViewLayout.GetColRangeWidth(0, Grid.InternalGetFrozenCols(), GridCellSizeKind.VisibleSize);
	ab |= ScrollBars.Horizontal;
}
Grid.AutoScrolling = ab;
So autoscrolling is only enabled if your start cell in not frozen. So, if you want to change this behavior, you can do your own GridDragSelectMouseController and replace this code. I am not sure what implications enabling auto scrolling that starts on a frozen cell might have for other grid behaviors. It would have to be tested. I will discuss this with Stefan to see if he knows any specific functionality that might break if you remove this check. Your tester can get the same results as autoscrolling by clicking the frozen cell, then scrolling the grid, and finally shift clicking the terminal cell.

Loader.
Live Chat Icon For mobile
Up arrow icon