ironheadMedlem sedan mars 20011 346 inlägg Hej!
Jag genererar en gridview automatiskt mha ett dataset förutom en av kolumnerna som jag skapar som en template (dropdownlist) och vill då ha värdet från denna dropdownlista (den e fylld med id och text).
Men jag vet inte hur jag ska komma åt den?
<asp:TemplateField HeaderText="Company" InsertVisible="true">
<ItemTemplate>
<asp:Label runat="server" ID="Companies" Text='<%# eval("CompanyName") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList runat="server" ID="editDrp" DataSourceID="objCompany" DataTextField="CompanyName" DataValueField="CompanyID" selectedvalue='<%# eval("CurrentCompanyID") %>'></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
i den genererade koden visas kontrollen som: "GridView1$ctl05$ctl00", men jag kan inte skriva "GridView1$editDrp" som jag kunde göra på "detailsview".
Hur ska jag komma åt min dropdown så jag kan använda denna parameter?
TravoniMedlem sedan okt. 20041 556 inlägg Funkar det inte med findcontrol?
ironheadMedlem sedan mars 20011 346 inlägg Näe, då jag tänkte använda befintliga kontroller, så har jag inget "code behind", eller kan man fånga upp det på ett bra sätt och skicka in det som parameter till min "ObjectDataSource"?
Om jag inte mins helt fel nu så ska det funka att binda selectedvärdet till den kolumnen som har värdet du vill ha selectat vid editering...
iom att du sätter selectedvärdet då utifrån ett befintligt värde i databasen så borde också det nya värdet du väljer sparas om du har valt att det ska vara ett two way tier bind...
Eller nått sånt.. Jag har gjort det med checkboxar och det borde inte vara något annorlunda med listboxar...
//Trinodia
ironheadMedlem sedan mars 20011 346 inlägg Hur ska man göra för att binda selectvärdet till den kolumnen?
Tar jag "GridView1$ctl04$editDrp" som värde, så är det just den raden....hur väljer man kolumnen?
ironheadMedlem sedan mars 20011 346 inlägg
Trinodia skrev:
Jag har gjort det med checkboxar och det borde inte vara något annorlunda med listboxar...
Har du möjlighet / lust att visa mig lite kod, så jag förstår hur det ska gå till?
<EditItemTemplate>
<asp:ListBox ID="lstKunder" runat="server" Rows="1" DataSourceID="SqlDataSource1" DataTextField="aktor"
DataValueField="id" SelectedValue='<%# Bind("kundId") %>' Width="170px" appendDataBoundItems="True">
<asp:ListItem Value="0">Välj kund...</asp:ListItem>
</asp:ListBox>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:connStr %>"
SelectCommand="SELECT [aktor], [id] FROM [kundkort] ORDER BY [aktor]"></asp:SqlDataSource>
</EditItemTemplate>
Va länge sedan jag skrev denna koden så jag är inte helt 100 på att det verkligen är rätt att lägga en sqldatasource inom edititemtemplate. Denna koden har jag också just nu bara använt i en detailview, inte en gridview men det borde vara liknande även i en gridview fast du då kanske kan ha en enda sqldatasource som ligger utanför gridviewen och du har den som datasource till alla. Du får prova lite men det här borde iallafall fungera en bit på vägen.
ironheadMedlem sedan mars 20011 346 inlägg Jag har inga problem med sqlDataSourcen eller nåt sånt, det enda jag har problem med är att få tag på parametervärdet från en dropdown/rad i en gridview. (vet att jag kan köra findcontrol codebehind, men jag vill se om det (borde gå) går mha de inbyggda kontrollerna att få tag på värdet). Med min detailsview var det ju bara att skriva: detailsview$DropDownList1, men i en gridview genereras den som GridView1$ctl05$ctl00 och blir ju olika värden/rad
Eftersom du bara editerar en i taget blir det ju ingen skillnad om du har den i ett gridview eller i en detailview. SqlDatasourcen håller ordning på vilket ID som den ska uppdatera när du är klar med editeringen.
Kollade tillbaka på din kod och du kör med EVAL för att få tag på vilket värde som ska vara selected.
Borde du inte köra med BIND (för att få en tvåvägsbindning) för selectedvalue istället så ska den uppdateras av sig själv förutsatt att du har den parametern inlagd i sqldatasourcen för update.
Parametern för den kolumnen har du säkert redan upplagd i sqldatasourcen om du lät den generera update, insert och delete querries själv.
Då ska det räcka med att binda med en two tier bind mot den sqldatasourcen och den kolumnen i sqldatasourcen så ska den sköta själv vilken rad den är på.
Iom att du bindar selectedvärdet med en två vägs bind så sköter binden kontakten med parametern. (vad jag mins iaf...)
Kollade lite snabbt på den koden jag har för Detailsview varianten och där bindar jag selectedvärdet precis som jag skrev ovan med en two tier bind och har bara parametern upplagd så som den blev genererad automatiskt, inget id namn behövt för att få det att funka.
Prova så får du se.