webForumDet fria alternativet

Dropdown-trubbel

3 svar · 405 visningar · startad av trexter

trexterMedlem sedan mars 20021 889 inlägg
#1

Har frågat om detta tidigare. Lade det på is men tänkte försöka fixa det nu. Den som får rätt på detta lilla delikata problem hamnar oomkullrunkeligen på tacksamhetslistan! ;)

  • Jag har en datagrid med information och vill även ha möjlighet att editera värdena. För en av kolumnerna (tillverkarkolumnen) innebär detta att man genom att klicka på editera ska kunna välja mellan ett antal olika värden. Dessa ska hämtas från en databas och ska lagras i en dropdown. Problemet är att det blir en dropdownlist i en datagrid med krångel och felmeddelanden till följd när man klickar "Editera" och triggar MyDataGrid_Edit.

  • Viktiga koden i .aspx-filen:

              <ASP:DataGrid id="MyDataGrid" runat="server"    
                OnEditCommand="MyDataGrid_Edit"
                OnCancelCommand="MyDataGrid_Cancel"
                OnUpdateCommand="MyDataGrid_Update"
                OnDeleteCommand="MyDataGrid_Delete"
                DataKeyField="ProduktID"
                AutoGenerateColumns="false"
                >
              <Columns>
                    <asp:ButtonColumn Text="Ta bort" CommandName="Delete"/>
                    <ASP:EditCommandColumn EditText="Editera" CancelText="Avbryt" UpdateText="Uppdatera" HeaderStyle-Wrap=false />
                    <ASP:BoundColumn HeaderText="ID" DataField="ProduktID" ReadOnly=true />
                    <ASP:TemplateColumn HeaderText="Namn" SortExpression="ID">
                    <ItemTemplate>
                        <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ProduktNamn") %>'/>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox runat="server" id="edit_namn" Text='<%# DataBinder.Eval(Container.DataItem, "ProduktNamn") %>'/>
                    </EditItemTemplate>
                    </asp:TemplateColumn>
                    <ASP:TemplateColumn HeaderText="Tillverkare" SortExpression="IDd">
                    <ItemTemplate>
                        <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "TillverkareNamn") %>'/>
                    </ItemTemplate>
                    <EditItemTemplate>
                        [b]<asp:DropDownList ID="edit_droptillverkare" runat="server"></asp:DropDownList>[/b]
                    </EditItemTemplate>
                    </asp:TemplateColumn>          
              </Columns>        
            </ASP:DataGrid>
    
  •     public void [b]MyDataGrid_Edit[/b](Object sender, DataGridCommandEventArgs E)
        {
            MyDataGrid.EditItemIndex = (int)E.Item.ItemIndex;
            BindGrid();
    
            DropDownList ddl = new DropDownList();
            ddl = (DropDownList)E.Item.FindControl("edit_droptillverkare");
    
            ddl.DataSource = DropsData();
            //dd1.DataTextField = "DText";
            //dd1.DataValueField = "DValue";
            ddl.DataBind();
        }
    
  •     public void [b]BindGrid[/b]()
        {
            SqlDataAdapter myCommand = new SqlDataAdapter("select p.ProduktID, p.ProduktNamn, Tillverkare.TillverkareNamn from Produkter p inner join Tillverkare on p.ProduktTillverkare = Tillverkare.TillverkareID where p.ProduktAnvID = " + UserIdentityName[1] + "", myConnection);
    
            DataSet ds = new DataSet();
            myCommand.Fill(ds, "Tillverkare");
    
            MyDataGrid.DataSource = ds.Tables["Tillverkare"].DefaultView;
            MyDataGrid.DataBind();
        }
    
          public ICollection [b]DropsData[/b]()
          {
            DataTable dt = new DataTable();
    
            dt.Columns.Add(new DataColumn("DText", typeof(String)));
            dt.Columns.Add(new DataColumn("DValue", typeof(String)));
    
    		SqlCommand myCommand = new SqlCommand("select TillverkareID, TillverkareNamn from Tillverkare where TillverkareAnvID = @TillverkareAnvID", myConnection);
            myCommand.Parameters.Add("@TillverkareAnvID", SqlDbType.Int, 10).Value = UserIdentityName[1];
    
    		SqlDataReader dr = myCommand.ExecuteReader();
    
    		while (dr.Read()) {
                dt.Rows.Add(CreateRow(dr["TillverkareNamn"].ToString(), dr["TillverkareID"].ToString(), dt));
            }
            dr.Close();
    
            DataView dv = new DataView(dt);
            return dv;
    
          }
    
          DataRow [b]CreateRow[/b](String Text, String Value, DataTable dt)
          {
              DataRow dr = dt.NewRow();
    
              dr[0] = Text;
              dr[1] = Value;
    
              return dr;
    
          }
    
  • Felmeddelandet är:

     Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
    

    Line 68:         ddl.DataSource = DropsData();
    
  • Frågade på ASP.NET-forumet men fick inte rätt på det även om jag fick en förklaring. http://forums.asp.net/1153290/ShowPost.aspx

Hjääääälp! :e

trexterMedlem sedan mars 20021 889 inlägg
#2

Äsch, inga programmerare som jobbar övertid fredagkvällar? §jr

DinoMedlem sedan sep. 20011 914 inlägg
#3

Har inte någon större erfarenhet av DataGriden, men...

<ASP:DataGrid id="MyDataGrid" runat="server"    
   OnEditCommand="MyDataGrid_Edit"
   OnCancelCommand="MyDataGrid_Cancel"
   OnUpdateCommand="MyDataGrid_Update"
   OnDeleteCommand="MyDataGrid_Delete"
   [b]OnItemDataBound="MyDataGrid_ItemDataBound"[/b]
   DataKeyField="ProduktID"
   AutoGenerateColumns="false"
>

...

public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs E)
{
   MyDataGrid.EditItemIndex = e.Item.ItemIndex;
   BindGrid();
}

...

void MyDataGrid_ItemDataBound(Object sender, DataGridItemEventArgs e) 
{
   if(e.Item.ItemType == ListItemType.EditItem)
   {
      DropDownList ddl = e.Item.FindControl("edit_droptillverkare") as DropDownList;

        ddl.DataSource = DropsData();
        dd1.DataTextField = "DText";
        dd1.DataValueField = "DValue";
        ddl.DataBind();
   }
}
trexterMedlem sedan mars 20021 889 inlägg
#4

Dino är min nya husgud!

139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)