Benutzer mit den meisten Antworten
Datagridview und textbox

Frage
-
Hallo zusammen,
Ich habe folgende Situation. 1 Form mit 2 bounded Datagridviews und 1 Textbox
Im datagridview1 werden kunden angezeigt und im datagridview2 die dazugehörigen projekte. d.h. ändert sich der currentcellindex im datagridview1, werden automtisch im datagirdview2 die projelte geladen. Das funktioniert auch.
mit der textbox möchte ich zu kundennamen im datagridview1 springen, d.h. ich gebe die anfangsbuchstaben in der textbox ein und mir werden die kundennamen vorgeschlagen und angehängt und die currenrow springt zum 1. gefundenen eintrag. Problem ist nur, dass das nur zu 90% funktioniert. bei den anderen nicht reproduzierbaren fällen wird entweder das texchanged event der textbox nicht gefeuert oder das currentcellindexchanged event des datagridview1??? folglich werden in diesen fällen nicht die richtigen projekte des ausgewählten kunden angezeigt.
Ich bitte um hilfe.
Antworten
-
danke elmar,
ich benutze eine datatable im dataset jeweils mit bindingsource. also das heißt zusätzlich zur datagridview noch die dataview benutzen?
also ich lande schon beim richtigen treffer, aber dann werden nicht die zu dieser ID gehörenden projekete geladen.
habs bisher noch nicht ausprobiert, da ich im urlaub war.
kann aber auch gerne mal den code posten:
Code des Textbox-Changed event:
Private Sub textbox1_textchanged(ByVal sender As Object, ByVal e As EventArgs) Handles TextBox1.TextChanged Dim DField As String DField = m_CSCDP Dim dr As DataRow() = DataSet11.Table.Select(DField + " Like '" & TextBox1.Text & "%'", DField) Dim t As New DataTable If dr.GetUpperBound(0) >= 0 Then Dim s As String = "" If Me.DataGridView1.SortOrder.ToString = "Ascending" Then s = " asc" Else s = " desc" End If DataSet11.Table.DefaultView.Sort = DField + s DataGridView1.FirstDisplayedScrollingRowIndex = DataSet11.Table.DefaultView.Find(dr(0).Item(DField).ToString) Me.DataGridView1.CurrentCell = DataGridView1.Item(Me.DataGridView1.FirstDisplayedScrollingColumnIndex, DataSet11.Table.DefaultView.Find(dr(0).Item(DField).ToString)) Me.CityIndex = DataSet11.Table.DefaultView.Find(dr(0).Item(DField).ToString) Else m_Proj.FillDG(m_CID) End If Me.Button1.Text += sender.Text Me.TextBox1.Focus() End Sub
Code des DataGridView1_CurrentCellChanged event:
Private Sub DataGridView1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.CurrentCellChanged If Me.DataGridView1.Rows.Count > 0 Then Dim pt As Point = DataGridView1.PointToClient(Cursor.Position) Dim hti As DataGridView.HitTestInfo = DataGridView1.HitTest(pt.X, pt.Y) If hti.Type = DataGrid.HitTestType.ColumnHeader Then Exit Sub End If Try RowData() m_Proj.FillDG(m_CID) Catch ex As Exception
End Try Else m_Proj.FillDG("0") End If End SubPrivate Sub RowData() If Not DataGridView1.CurrentRow Is Nothing Then CurrGridRow = DataGridView1.CurrentRow m_CID = DirectCast(CurrGridRow.DataBoundItem, DataRowView).Item("ID") End If End Sub
Grüße
Jörg- Als Antwort markiert goldjoat Mittwoch, 7. April 2010 10:23
Alle Antworten
-
Hallo,
ohne den Code zu sehen, den Du für die Suche verwendest - ist das schwer zu beantworten.
Da Du gebundene DataGridView(s) verwendest, wäre es sinnvoller direkt in den Datenquellen zu suchen.
Hast Du an eine DataSet/DataTable (mit oder ohne BindingSource) gebunden,
so solltest Du die zugrundeliegende DataView verwenden.
Ddenn ansonsten kann es schon durch abweichende Sortierungen dazu führen,
dass ein "Treffer" auf einer falschen Zeile landet.
Gruß Elmar- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 3. Februar 2010 10:36
- Tag als Antwort aufgehoben goldjoat Donnerstag, 18. Februar 2010 15:22
-
danke elmar,
ich benutze eine datatable im dataset jeweils mit bindingsource. also das heißt zusätzlich zur datagridview noch die dataview benutzen?
also ich lande schon beim richtigen treffer, aber dann werden nicht die zu dieser ID gehörenden projekete geladen.
habs bisher noch nicht ausprobiert, da ich im urlaub war.
kann aber auch gerne mal den code posten:
Code des Textbox-Changed event:
Private Sub textbox1_textchanged(ByVal sender As Object, ByVal e As EventArgs) Handles TextBox1.TextChanged Dim DField As String DField = m_CSCDP Dim dr As DataRow() = DataSet11.Table.Select(DField + " Like '" & TextBox1.Text & "%'", DField) Dim t As New DataTable If dr.GetUpperBound(0) >= 0 Then Dim s As String = "" If Me.DataGridView1.SortOrder.ToString = "Ascending" Then s = " asc" Else s = " desc" End If DataSet11.Table.DefaultView.Sort = DField + s DataGridView1.FirstDisplayedScrollingRowIndex = DataSet11.Table.DefaultView.Find(dr(0).Item(DField).ToString) Me.DataGridView1.CurrentCell = DataGridView1.Item(Me.DataGridView1.FirstDisplayedScrollingColumnIndex, DataSet11.Table.DefaultView.Find(dr(0).Item(DField).ToString)) Me.CityIndex = DataSet11.Table.DefaultView.Find(dr(0).Item(DField).ToString) Else m_Proj.FillDG(m_CID) End If Me.Button1.Text += sender.Text Me.TextBox1.Focus() End Sub
Code des DataGridView1_CurrentCellChanged event:
Private Sub DataGridView1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.CurrentCellChanged If Me.DataGridView1.Rows.Count > 0 Then Dim pt As Point = DataGridView1.PointToClient(Cursor.Position) Dim hti As DataGridView.HitTestInfo = DataGridView1.HitTest(pt.X, pt.Y) If hti.Type = DataGrid.HitTestType.ColumnHeader Then Exit Sub End If Try RowData() m_Proj.FillDG(m_CID) Catch ex As Exception
End Try Else m_Proj.FillDG("0") End If End SubPrivate Sub RowData() If Not DataGridView1.CurrentRow Is Nothing Then CurrGridRow = DataGridView1.CurrentRow m_CID = DirectCast(CurrGridRow.DataBoundItem, DataRowView).Item("ID") End If End Sub
Grüße
Jörg- Als Antwort markiert goldjoat Mittwoch, 7. April 2010 10:23