Han-SoloMedlem sedan jan. 2001290 inlägg Hej!
Har stött på ett nästan pinsamt problem...
Att fylla en "vanlig" dropdownlist från en databas är för mig inga problem... MEN, när jag föröker fylla den dropdownlist jag har i <EditItemTemplate> i en datagrid så blåvägrar den... den säger att min dropdownlist är en null-referens... inget ojekt!?
Vad ska man tänka på när man ska fylla en droppdownlist som finns INUTI en <EditItemTemplate> i en DATAGRID???
renholmMedlem sedan apr. 20012 266 inlägg Gör en funktion som retunerar en DataReader eller DataSet, beroende på vad du användar, men i alla fall, så annropar du din funktion i från datasource tagen i <asp:dropdownlist>.
<asp:dropdownlist datasource='<%# minFunktion %>'>
Han-SoloMedlem sedan jan. 2001290 inlägg Jäklarns...
Jag har gjort som så att jag sätter
DataTextField, DataValueField på codebehindsidan.
Hämtar ur ett dataset en DataView, som jag sätter till DataSource för d.d.l:en för att slutligen DataBind():a denna...
Detta fungerar ypperligt när jag INTE har en datagrid.
Jag gissar att det är ett annat sätt att göra det du säger? ELLER?
(Jag gillar nämligen inte att använda de där <%# %> taggarna :l )
Hur som... jag ska prova ditt tips! -> håller tummarna...
NETworkMedlem sedan juni 20011 732 inlägg Du kan göra så som du beskriver, men du måste först hitta din kontroll i din datagrid. Något åt det här hållet i din editcommand kanske:
((DropDownList)MyDataGrid.Items[e.Item.ItemIndex].FindControl("MyDropDownList")).DataSource = ...
Han-SoloMedlem sedan jan. 2001290 inlägg Jorå, 'FindContoll'- köret har jag testat med... men näe, helt j---a omöjligt. Jag går bet...
Här följer en liten del av koden (med felmeddelandet):
DataView dv = dsRights.Tables[0].DefaultView;
DropDownList ddlTemp = (DropDownList)dgUsers.Items[e.Item.ItemIndex].FindControl("ddlRights");
[B][red]ddlTemp.DataSource = dv;[/red] [/B] // felmeddelande: [red][B]Object reference not set to an instance of an object.[/B][/red]
ddlTemp.DataTextField = "rights";
ddlTemp.DataValueField = "rights";
ddlTemp.DataBind();
Jag har kontrollerat att DataView:n (dv) innehåller den information som ska finnas där... Men icke!
På .aspx sidan ser det ut såhär:
<EditItemTemplate>
<asp:DropDownList ID="ddlRights" runat="server" />
</EditItemTemplate>
Vad hittar man på då?
Renholm Jag testade din idé - > Den fungerar, men mja-a, jag tycker jag tappar kontrollen över den på någe vis... jag vill t.ex. att en viss post (olika varje gång) ska markeras när man går in i Editeringsläge...
NETworkMedlem sedan juni 20011 732 inlägg Använder du vs.net? Om ja, markera din datagrid i designläget, välj events... under behavior finns något som heter ItemDataBound (fires after an item has been databound). Prova att skapa en funktion utifrån denna (skriv bara ett namn på funktionen och tryck enter precis som vanligt) och där i funktionen försöker du hitta din dropdownlist.
void myItemDataBoundHandler (Object src, DataGridItemEventArgs e) {
DropDownList myDropdownlist = (DropDownList) e.Item.FindControl ("myDropdownlist");
myDropdownlist.DataSource = ... ;
myDropdownlist.DataBind();
}
Otestat!
Han-SoloMedlem sedan jan. 2001290 inlägg Lät eländet smälta några dagar... men idag tog jag tag i det igen. 'ItemDataBound'-tipset.
Värt att nämna är att man måste kontrollera om findkontrollen finns! ;) Det är ju bara när 'EditItemTemplate' används den skall köras.
private void Fylleri(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
Control ddl = e.Item.FindControl("ddlRights");
if (ddl != null) //controllen finns.
{
[...]
for(int i = 0; i < dsRights.Tables[0].Rows.Count; i++)
{
[...]// fylla ddl:en
}// for
}// if
}// Fylleri