Wrox Programmer Forums
Go Back   Wrox Programmer Forums > .NET > Other .NET > General .NET
|
General .NET For general discussion of MICROSOFT .NET topics that don't fall within any of the other .NET forum subcategories or .NET language forums.  If your question is specific to a language (C# or Visual Basic) or type of application (Windows Forms or ASP.Net) try an applicable forum category. ** PLEASE BE SPECIFIC WITH YOUR QUESTION ** When posting here, provide details regarding the Microsoft .NET language you are using and/or what type of application (Windows/Web Forms, etc) you are working in, if applicable to the question. This will help others answer the question without having to ask.
Welcome to the p2p.wrox.com Forums.

You are currently viewing the General .NET section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old February 23rd, 2005, 05:11 AM
Authorized User
 
Join Date: Jun 2004
Posts: 10
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via ICQ to SupaHoopsa Send a message via AIM to SupaHoopsa Send a message via Yahoo to SupaHoopsa
Default How do I catch SelectionChangeCommitted event of a

I have a standard combo box in a datagrid (DataGridEnableComboBoxColumn) and I want to catch the SelectionChangeCommitted event.

In my datagridcomboboxcolumn class I have the following:

Public Delegate Sub ComboValueChanged(ByVal changingRow As Integer, ByVal newValue As Object)

Public Event CheckComboValueChanged As ComboValueChanged


When I create my datagridcolumnstyle I have added the following handler:

AddHandler tccolumn.CheckComboValueChanged, New DataGridEnableComboBoxColumn.ComboValueChanged(Add ressOf myProjDet.JobStatusChanged)


And myProjDet.JobStatusChanged looks like this:

Public Sub JobStatusChanged(ByVal changingRow As Integer, ByVal newValue As Object)

 End Sub



HOWEVER, putting a debug breakpoint on this sub proves that even though I change the value in the combobox, the code never drops into this eventhandler.


Can anyone explain this?
Am I doing something obviously wrong?

Any help would be VERY appreciated.


 
Old February 24th, 2005, 05:17 AM
Authorized User
 
Join Date: Jun 2004
Posts: 10
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via ICQ to SupaHoopsa Send a message via AIM to SupaHoopsa Send a message via Yahoo to SupaHoopsa
Default

If it helps, here is the code for my DataGridComboBoxColumn


Code:
Option Strict Off 
Option Explicit On 

Imports Microsoft.VisualBasic 
Imports System 
Imports System.ComponentModel 
Imports System.Data 
Imports System.Data.Common 
Imports System.Data.OleDb 
Imports System.Drawing 
Imports System.Windows.Forms 



' Step 1. Derive a custom column style from DataGridTextBoxColumn 
'    a) add a ComboBox member 
'  b) track when the combobox has focus in Enter and Leave events 
'  c) override Edit to allow the ComboBox to replace the TextBox 
'  d) override Commit to save the changed data 

Public Class DataGridComboBoxColumn 
   Inherits DataGridTextBoxColumn 
   Public ColumnComboBox As NoKeyUpCombo 
   Private _source As System.Windows.Forms.CurrencyManager 
   Private _rowNum As Integer 
   Private _isEditing As Boolean 
   Public Shared _RowCount As Integer 
   Public Delegate Sub ComboValueChanged(ByVal changingRow As Integer, ByVal newValue As Object) 
   Private moCombo As ComboHelper 

   Public Sub New() 
       _source = Nothing 
       _isEditing = False 
       _RowCount = -1 

       ColumnComboBox = New NoKeyUpCombo 
       ColumnComboBox.DropDownStyle = ComboBoxStyle.DropDownList 
       moCombo = New ComboHelper 

       AddHandler ColumnComboBox.Enter, AddressOf EnterComboBox 
       AddHandler ColumnComboBox.Leave, AddressOf LeaveComboBox 
       AddHandler ColumnComboBox.SelectionChangeCommitted, AddressOf ComboStartEditing 
   End Sub 'New 
   Public Event CheckComboValueChanged As ComboValueChanged 

   Private Sub HandleScroll(ByVal sender As Object, ByVal e As EventArgs) 
       If ColumnComboBox.Visible Then 
           ColumnComboBox.Hide() 
       End If 
   End Sub 'HandleScroll 

   Private Sub ComboStartEditing(ByVal sender As Object, ByVal e As EventArgs) 
       _isEditing = True 
       MyBase.ColumnStartedEditing(sender) 
   End Sub 'ComboMadeCurrent 


   Private Sub LeaveComboBox(ByVal sender As Object, ByVal e As EventArgs) 
       If _isEditing Then 
           SetColumnValueAtRow(_source, _rowNum, ColumnComboBox.Text) 
           _isEditing = False 
           Invalidate() 

       End If 
       ColumnComboBox.Hide() 
       AddHandler Me.DataGridTableStyle.DataGrid.Scroll, New EventHandler(AddressOf HandleScroll) 
   End Sub 'LeaveComboBox 

   Private Sub EnterComboBox(ByVal sender As Object, ByVal e As EventArgs) 
       Dim myCombo As ComboBox = CType(sender, ComboBox) 
       moCombo.AttachTo(myCombo) 
   End Sub 'EnterComboBox 


   Protected Overloads Overrides Sub Edit(ByVal [source] As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal bounds As System.Drawing.Rectangle, ByVal [readOnly] As Boolean, ByVal instantText As String, ByVal cellIsVisible As Boolean) 

       MyBase.Edit([source], rowNum, bounds, [readOnly], instantText, cellIsVisible) 

       _rowNum = rowNum 
       _source = [source] 

       ColumnComboBox.Parent = Me.TextBox.Parent 
       ColumnComboBox.Location = Me.TextBox.Location 
       ColumnComboBox.Size = New Size(Me.TextBox.Size.Width, ColumnComboBox.Size.Height) 
       ColumnComboBox.SelectedIndex = ColumnComboBox.FindStringExact(Me.TextBox.Text) 
       ColumnComboBox.Text = Me.TextBox.Text 
       Me.TextBox.Visible = False 
       ColumnComboBox.Visible = True 
       AddHandler Me.DataGridTableStyle.DataGrid.Scroll, AddressOf HandleScroll 

       ColumnComboBox.BringToFront() 
       ColumnComboBox.Focus() 
   End Sub 'Edit 

   Protected Overrides Function Commit(ByVal dataSource As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer) As Boolean 

       If _isEditing Then 
           _isEditing = False 
           SetColumnValueAtRow(dataSource, rowNum, ColumnComboBox.Text) 
       End If 
       Return True 
   End Function 'Commit 


   Protected Overrides Sub ConcedeFocus() 
       'RJC 4/2/2005 - Task Ref: JAD-2850 - Comment out unnecessary Console.writeline 
       'Console.WriteLine("ConcedeFocus") 
       MyBase.ConcedeFocus() 
   End Sub 'ConcedeFocus 

   Protected Overrides Function GetColumnValueAtRow(ByVal [source] As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer) As Object 

       Dim s As Object = MyBase.GetColumnValueAtRow([source], rowNum) 
       Dim dv As DataView = CType(Me.ColumnComboBox.DataSource, DataView) 
       Dim rowCount As Integer = dv.Count 
       Dim i As Integer = 0 
       Dim s1 As Object 

       'if things are slow, you could order your dataview 
       '& use binary search instead of this linear one 
       While i < rowCount 
           s1 = dv(i)(Me.ColumnComboBox.ValueMember) 
           If (Not s1 Is DBNull.Value) AndAlso _ 
               (Not s Is DBNull.Value) AndAlso _ 
                       s = s1 Then 
               Exit While 
           End If 
           i = i + 1 
       End While 

       If i < rowCount Then 
           Return dv(i)(Me.ColumnComboBox.DisplayMember) 
       End If 
       Return DBNull.Value 
   End Function 'GetColumnValueAtRow 


   Protected Overrides Sub SetColumnValueAtRow(ByVal [source] As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal value As Object) 
       Dim s As Object = value 

       Dim dv As DataView = CType(Me.ColumnComboBox.DataSource, DataView) 
       Dim rowCount As Integer = dv.Count 
       Dim i As Integer = 0 
       Dim s1 As Object 

       'if things are slow, you could order your dataview 
       '& use binary search instead of this linear one 
       While i < rowCount 
           s1 = dv(i)(Me.ColumnComboBox.DisplayMember) 
           If (Not s1 Is DBNull.Value) AndAlso _ 
                       s = s1 Then 
               Exit While 
           End If 
           i = i + 1 
       End While 
       If i < rowCount Then 
           s = dv(i)(Me.ColumnComboBox.ValueMember) 
       Else 
           s = DBNull.Value 
       End If 
       MyBase.SetColumnValueAtRow([source], rowNum, s) 
   End Sub 'SetColumnValueAtRow 

End Class 'DataGridComboBoxColumn






Similar Threads
Thread Thread Starter Forum Replies Last Post
Try...Catch lowell VB.NET 3 July 23rd, 2007 06:35 AM
how to catch event of a DLL in JavaScript ? hendyhanusin Javascript 2 April 4th, 2007 06:50 AM
Try Catch not working?? dparsons ASP.NET 1.0 and 1.1 Professional 3 September 18th, 2006 06:54 PM
Try and Catch? mujju PHP How-To 2 January 20th, 2005 12:27 PM
catch event of dropdownlist inside datagrid alyeng2000 ASP.NET 1.0 and 1.1 Professional 3 August 24th, 2004 10:44 AM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.