none
Fehlermeldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. RRS feed

  • Frage

  • Ich habe immer noch Probleme, im Gridview über einen Button Werte auszulesen und zu bearbeiten.

    z.b. selectierte Werte aus einer Listbox z.B.

    Ich habe folgendes Script als Grundlage genommen
    http://www.codeproject.com/KB/dotnet/AccessingControlsInsideGr.aspx

    Ich habe folgendes Event

     Protected Sub btnListEinfuegen_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim sc As StringCollection = New StringCollection

            ' --- GridviewRows
            For Each row As GridViewRow In grid.Rows

                'Dim textBoxText As String = _
                '  CType(row.FindControl("id"), TextBox).Text
                'If (Not textBoxText Is Nothing) Then
                '    Response.Write(textBoxText)
                'End If

                Dim myListBox As ListBox = _
                   CType(row.FindControl("ListNichtInDetail"), ListBox)

                For Each selectedItem As ListItem In myListBox.Items

                    If selectedItem.Selected Then
                        'Response.Write(selectedItem.Value)
                        sc.Add(selectedItem.Text)
                    End If
                Next
            Next

            Dim btn As LinkButton = CType(sender, LinkButton)
            Dim CommandName As String = btn.CommandName
            Dim comText As String = btn.CommandArgument.ToString

            insertRecords(sc, comText)
            'grid.EditIndex = 0
        End Sub
     
      Hier der Scirptcode des Buttons
     <asp:Button ID="btnListEinfuegen" CommandArgument='<%# bind("id") %>'
                           OnClick="btnListEinfuegen_Click" runat="server" Text=">>" />
     
     Und hier der Scirptcode der Listbox
                            <asp:ListBox ID="ListNichtInDetail" SelectionMode="Multiple"
                runat="server" DataSourceID="odsNichtInDetail" DataTextField="Detail"
                    DataValueField="detailID" Height="200px"></asp:ListBox>
                <asp:ObjectDataSource ID="odsNichtInDetail" runat="server"
                    SelectMethod="GetPhdsNichtInDetail"
                    TypeName="Samples.AspNet.ObjectDataSource.phds"
                               OldValuesParameterFormatString="original_{0}">
                  <SelectParameters>
                        <asp:ControlParameter ControlID="id" Name="id" 
                            Type="Int32" />                       
                    </SelectParameters>
              </asp:ObjectDataSource>
             
    Es kommt jetzt folgender Fehler

    System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

     in dieser Zeile
     
     For Each selectedItem As ListItem In myListBox.Items

    Was mache ich falsch?
    Ich lese seit Stunden Einträge zu dieser Fehlermeldung. Der Debugger sagt, ich müsste New einfügen, aber wo?
    Liebe Grüße, die Luzie!
    Sonntag, 20. Dezember 2009 11:56

Antworten

  • Hallo Luzie,

    nur irgendwo New einfügen bringt Dich bei der Lösung Deines Problems sicher nicht weiter. Du möchtest ja keine neue Instanz Deiner ListBox, sondern die in Deiner Seite bzw. in Deinem Grid, wenn ich Deinen Code richtig interpretiere. Wenn Du hier eine NullReferenceException bekommst, mag das daran liegen, dass die Anweisung

    Dim myListBox As ListBox = CType(row.FindControl("ListNichtInDetail"), ListBox)

    Deine ListBox nicht findet, also myListBox in der nachfolgenden Anweisung Nothing ist. Hier müsstest Du klären, warum er die ListBox nicht finden kann. Hierfür wäre der Aufbau Deines Grids von Interesse, um Dir da spezifischer helfen zu können. Wenn es Zeilen gibt die keine ListBox enthalten, würde es ausreichen, wenn Du vor der Ausführung der For Schleife überprüfst, ob myListBox auf eine gültige Objektinstanz verweist:

    If myListBox IsNot Nothing Then
       For Each selectedItem As ListItem In myListBox.Items
        ...


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Sonntag, 20. Dezember 2009 12:16
    Beantworter

Alle Antworten

  • Hallo Luzie,

    nur irgendwo New einfügen bringt Dich bei der Lösung Deines Problems sicher nicht weiter. Du möchtest ja keine neue Instanz Deiner ListBox, sondern die in Deiner Seite bzw. in Deinem Grid, wenn ich Deinen Code richtig interpretiere. Wenn Du hier eine NullReferenceException bekommst, mag das daran liegen, dass die Anweisung

    Dim myListBox As ListBox = CType(row.FindControl("ListNichtInDetail"), ListBox)

    Deine ListBox nicht findet, also myListBox in der nachfolgenden Anweisung Nothing ist. Hier müsstest Du klären, warum er die ListBox nicht finden kann. Hierfür wäre der Aufbau Deines Grids von Interesse, um Dir da spezifischer helfen zu können. Wenn es Zeilen gibt die keine ListBox enthalten, würde es ausreichen, wenn Du vor der Ausführung der For Schleife überprüfst, ob myListBox auf eine gültige Objektinstanz verweist:

    If myListBox IsNot Nothing Then
       For Each selectedItem As ListItem In myListBox.Items
        ...


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Sonntag, 20. Dezember 2009 12:16
    Beantworter
  • Hallo Thorsten,

    Dank Dir für die Antwort.
    Genau das wars, es läuft jetzt, danke!
    Liebe Grüße, die Luzie!
    Sonntag, 20. Dezember 2009 19:33