Tacksam för hjälp med följande: Vill kunna markera flera rader (i den första kolumnen) i en datagrid och lagra/append varje "item" till en sträng. Strängen(m_STR) ska användas i en sql-sats så därför ska den kunna innehålla flera olika val. Hittade en lösning som fungerade. Datagriden är ju kopplad till ett dataset så det blev så här: Jonas, Tack, verkar som en bra lösning men jag fick följande felmedd: Jonas, Svarar mig själv, Hade glömt sätta RowHeadersVisible till True för datagridden så därför kunde jag inte selecta.. Nu funkar det klockrent efter ditt senaste inlägg. Tack för hjälpen. Jonas,Datagrid - itemselect eller checked?
tex. SELECT Namn IN(m_STR) FROM tblNamn
Någon som vet ett smart sätt?Sv: Datagrid - itemselect eller checked?
Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged
Dim rad As Integer = DataGrid1.CurrentCell.RowNumber
m_valdaItems = m_valdaItems & "'" & m_currentDs.Tables(0).Rows(rad).Item(0) & "'" & ","
End Sub
Det är kanske okej.. Nu e det bara det att varje gång jag klickar på en ny rad så förvinner tidigare markering i gridden! Någon som vet hur man man gör för att de markerade raderna ska "FÖRBLI" markerade så att säga..??Sv: Datagrid - itemselect eller checked?
Här har du en annan lösning
<code>
Private Sub GridForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim info As DataTable = New DataTable
info.TableName = "Info"
info.Columns.Add("Kolumn1")
info.Columns.Add("Kolumn2")
info.Rows.Add(New Object() {"Rad1Kolumn1", "Rad1Kolumn2"})
info.Rows.Add(New Object() {"Rad2Kolumn1", "Rad2Kolumn2"})
info.Rows.Add(New Object() {"Rad3Kolumn1", "Rad3Kolumn2"})
DataGrid1.DataSource = info
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dataTable As DataTable
dataTable = CType(DataGrid1.DataSource, DataTable)
Dim selectedValues As String
For Index As Integer = 0 To dataTable.Rows.Count Step 1
If DataGrid1.IsSelected(Index) Then
selectedValues = selectedValues + DataGrid1.Item(Index, 0) + ","
End If
Next
If Not selectedValues Is Nothing Then
If selectedValues.Substring(selectedValues.Length - 1) = "," Then
selectedValues = selectedValues.Remove(selectedValues.Length - 1, 1)
End If
MessageBox.Show(selectedValues)
End If
End Sub
</code>
Koden kommer från en Form som heter <b>GridForm</b> och har en knapp på sig som heter <b>Button1</b> när du klickar på knappen får du upp en meddelanderuta som visar de valda raderna (i detta fallet hämtar den värdena från första kolumnen). För att multimarkera håller du nera CTRL när du klickar på raderna.
//AndreasSv: Datagrid - itemselect eller checked?
An unhandled exception of type 'System.IndexOutOfRangeException' occurred in system.windows.forms.dll
Additional information: Indexet låg utanför gränserna för matrisen.
här: If DataGrid1.IsSelected(Index) Then
och kompileringsfel här:
Dim dataTable As DataTable
dataTable = CType(DataGrid1.DataSource, DataTable)
..så jag bytade till:
Dim dataTable As DataTable
dataTable = m_currentDs.Tables(0)
eftersom jag tidigare i koden har:
DataGrid1.DataSource = m_currentDs.Tables(0)
Kan du se var det felar?Sv: Datagrid - itemselect eller checked?
Jag ber om ursäkt. Givetvis skall loopen gå till <b>Count - 1</b> då gridden är nollindxerad
<code>
Dim selectedValues As String
For Index As Integer = 0 To dataTable.Rows.Count - 1 Step 1
Debug.WriteLine(Index)
If DataGrid1.IsSelected(Index) Then
selectedValues = selectedValues + DataGrid1.Item(Index, 0) + ","
End If
Next
</code>
Den rad som du säger att du får kompileringsfel på är korrekt och skall fungera eftersom
jag själv testat den (senast 1 minut sen).
//AndreasSv: Datagrid - itemselect eller checked?
Nä min kod funkar inte om du använder ett DataSet direkt som datakälla till din grid. Anledningen är att <b>DataGrid1.DataSource</b> returnerar ett <b>Object</b> och i ditt fall är det ett DataSet som du i så fall fösöker typa till ett DataTable.
Så kör på din lösning, om du ändå har tillgång till ditt DataSet så kör på det. Annars får du först type om din DataGrid1.DataSource till ett DataSet och sen hämta ut .Tables(0) ur det som du lagrar i dataTable, men i detta fallet är det juh inte nödvändigt då du har direkt tillgång.Sv: Datagrid - itemselect eller checked?
/JonasSv: Datagrid - itemselect eller checked?
Om svaren i denna tråd har hjälpt dig hitta en lösning på ditt problem ber jag dig att markera inlägget som löst (uppe till höger i forumet). Genom att markera inlägget som löst så visar du andra att det inte bara finns en fråga i tåden utan även ett fungerande svar. Detta hjälper andra som har samma problem att hitta en lösning på ett effektivare sätt.
//Andreas