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.på
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