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.
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

GDBG, SelectionChanging and Arrow Keys

Thread ID:

Created:

Updated:

Platform:

Replies:

15406 Jun 17,2004 10:23 AM UTC Jun 22,2004 11:52 AM UTC Windows Forms 7
loading
Tags: GridControl
Administrator [Syncfusion]
Asked On June 17, 2004 10:23 AM UTC

Clay, I''m not able to get the correct row index in GDBG when changing the current row with the arrow keys up/down. I''m setting up the ListBoxSelectionMode to One and adding these event handler to the form. I''m modifying the DataBoundSortByDisplayMember to reproduce the behaviour: private void gridDataBoundGrid1_CurrentCellActivating(object sender, Syncfusion.Windows.Forms.Grid.GridCurrentCellActivatingEventArgs e) { if( e.RowIndex > 0 && e.ColIndex > 0 ) { e.ColIndex = 0; } } private void Model_SelectionChanging(object sender, GridSelectionChangingEventArgs e) { if( e.Range.IsRows ) { MessageBox.Show( e.Range.Top.ToString() ); } } When you use the mouse to change the position, the correct index will be in the e.Range. If you use the arrow key up/down, the e.Range.Top still contains the index of the last position. I''m using 2.0.5.1. Regards, Thomas

Administrator [Syncfusion]
Replied On June 17, 2004 11:16 AM UTC

This is likely a bug, but I am not sure whether I am overlooking something that forces things to behave this way in ListBoxSelectionMode. As a work around, I thnk you can handle the grid.KeyDone event (or override OnKeyDown), and raise the event yourself making sure you pass the proper row range. Here is some code that worked for me in a little sample.
private void gridDataBoundGrid1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
	GridCurrentCell cc = this.gridDataBoundGrid1.CurrentCell;
	if(e.KeyCode == Keys.Up && cc.RowIndex > this.gridDataBoundGrid1.Model.Rows.HeaderCount + 1)
	{
		GridRangeInfo currentRange = GridRangeInfo.Row(cc.RowIndex);
		GridRangeInfo newRange = GridRangeInfo.Row(cc.RowIndex - 1);
		GridSelectionChangingEventArgs se = new GridSelectionChangingEventArgs(newRange, GridSelectionReason.ArrowKey, GridRangeInfo.Empty);
		this.gridDataBoundGrid1.Model.RaiseSelectionChanging(se);
		if(!se.Cancel)
		{	
			this.gridDataBoundGrid1.Selections.ChangeSelection(currentRange, newRange, false);
			this.gridDataBoundGrid1.CurrentCell.InternalMove(GridDirectionType.Up, 1, GridSetCurrentCellOptions.None);
		}
		e.Handled = true;
	}
	else if(e.KeyCode == Keys.Down && cc.RowIndex < this.gridDataBoundGrid1.Model.RowCount)
	{
		GridRangeInfo currentRange = GridRangeInfo.Row(cc.RowIndex);
		GridRangeInfo newRange = GridRangeInfo.Row(cc.RowIndex + 1);
		GridSelectionChangingEventArgs se = new GridSelectionChangingEventArgs(newRange, GridSelectionReason.ArrowKey, GridRangeInfo.Empty);
		this.gridDataBoundGrid1.Model.RaiseSelectionChanging(se);
		if(!se.Cancel)
		{	
			this.gridDataBoundGrid1.Selections.ChangeSelection(currentRange, newRange, false);
			this.gridDataBoundGrid1.CurrentCell.InternalMove(GridDirectionType.Down, 1, GridSetCurrentCellOptions.None);
		}
		e.Handled = true;
	}
}

Administrator [Syncfusion]
Replied On June 17, 2004 02:27 PM UTC

Hi Clay Thanks for the code. I''m using the follwing code in SelectionChanging: http://www.syncfusion.com/Support/Forums/message.aspx?MessageID=14870 The row is not going to be current, because of the cancel in SelectionChanging. The move will not be made because se.Cancel is true: this.Model.RaiseSelectionChanging(se); if(!se.Cancel) { this.Selections.ChangeSelection(currentRange, newRange, false); this.CurrentCell.InternalMove(GridDirectionType.Up, 1, GridSetCurrentCellOptions.None); } What I have to change in the code to get it running? Regards, Thomas

Administrator [Syncfusion]
Replied On June 17, 2004 02:40 PM UTC

f.y.i I''m overriding the OnKeyDown method. Regards, Thomas

Administrator [Syncfusion]
Replied On June 17, 2004 07:59 PM UTC

If I understand you properly, you want to not display the current row colored as selected using ListBoxSelectionMode = one. Is this correct? If so, I think you will have to do away with the ListBoxSelectionsMode = one setting. The reason is that with this setting, the current row will always be forced to be selected (Not withstanding anything you do in SelectionsChanging). It would be straight-forward to have a SelectedRow property that was differert than the CurrentCell.RowIndex, and not use ListBoxSelectionMode. In PrepareViewStyleInfo, you could color SelectedRow if it were valid (say > -1). Then you can use CurrentCellMoving to test whether you want to change SelectedRow or not. If I misunderstood what you need, please let me know.

Administrator [Syncfusion]
Replied On June 18, 2004 02:51 AM UTC

Clay, I''ll prepare a sample that exactly shows what I need. Thanks, Thomas

Administrator [Syncfusion]
Replied On June 22, 2004 09:22 AM UTC

Hi Clay, I''m updating the incident 11867 and attaching the sample. Regards Thomas

Administrator [Syncfusion]
Replied On June 22, 2004 11:52 AM UTC

The incident has been updated.

CONFIRMATION

This post will be permanently deleted. Are you sure you want to continue?

Sorry, An error occured while processing your request. Please try again later.

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

;