Hej! Tjena! Jag laddar in data med en sql Fråga. Dock så väljer jag själv vilka columner som skall visas dvs AutoGenere...=false. För jag har en edit knapp med. Dock vill jag ta bort den och att man skall klicka på den cellen man skall editera... <code> Hej och tack.. Tjena! Mysigt att mitt förslag antogs. Om inte annat för att det är den typen som jag använder varje gång som jag gör det som efterfrågades. Vore otrevligt om jag har gjort fel hittills. Jag tackar för er hjälp....skall nu dra mig tillbaka och gåigenom allt.. Jag lpvar att återkomman när jag är klar...Hämta värden från en datagrid cell
Många har npg ställt denna fråga och jag gör det nu med..
Jag har en datagrid med 4 kolumner. I två av dessa har jag ett namn. Jag vill kunna klicka på namnet då skall ett värde hämtas ex:
Företag ref tele
TOTO Janne 45465465
Jag vill kunna klicka på TOTO och sedan hämta upp all data på TOTO via en SQL-Fråga. Dvs under namnet TOTO så skall det finnas et id nummer som jag kan hämta ut. Likadant skall det vara Janne.
HUr kan jag göra det... Jag önskar hjärna att någon ger mig ett exemepl med en förklaring.... detta är inte så självklart för mig än
/phinalaSv: Hämta värden från en datagrid cell
Tror jag är med på vad du menar.
Först en fråga, hur har du valt att ladda in datan i griden?
Om du gör det "automatiskt", dvs har AutoGenerateColumns=true och låter t.ex. en SqlDataAdapter fylla den så är det knivigt. Då har du dålig kontroll över innehållet.
Det bästa, tycker jag, är att själv hämta in datan med SQL-anrop, och bygga griden med tamplates. Då kan du lätt söka upp kontrollerna och ändra/hämta info från dem...även om det där klickandet kräver lite extra jobb...
Fast så kanske du redan börjat? =)
Mvh
Carl JohanSv: Hämta värden från en datagrid cell
Ok.. hur går jag vidare om vi tar det från steg 1...
Jag använder en oleadapter som fyller ett dataset. Som i sin tur fyller datagriden..
/phinalaSv: Hämta värden från en datagrid cell
<asp:datagrid id="PowerIsMine" datakeyfield="TOTOID">
<columns>
...
<asp:ButtonColumn Text="Ändra" CommandName="Edit" />
</columns>
</asp:datagrid>
</code>
och i codebehind finner vi följande
<code>
Private Sub grdNodeConfig_EditCommand(ByVal source As Object, _
ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
Handles grdNodeConfig.EditCommand
Dim TOTOID as integer
TOTOID = integer.parse(PowerIsMine.DataKeys(e.item.itemindex).tostring)
' TOTOID har nu det id som den aktuella raden.
End Sub
</code>
HEPP!Sv: Hämta värden från en datagrid cell
när jag decklarerar
totoid= interger.parse.(datagrid1....
så blåmarkeras integer och den säger att den inte är deklarerad..
Vad har jag missat
/PhinalaSv: Hämta värden från en datagrid cell
Herr Sands metod funkar säkert bra!
Kan man förresten inte använda
<code>
dim totoid%=CInt(PowerIsMine.DataKeys(e.item.itemindex))
</code>
istället?
Sedan är det alltså bara att använda totoid och visa vilken data man vill.
För att få till de här musklicken kan du göra följande:
Först skapa (behåll) en datagrid-kolumn med linkbuttons för edit (nedan döpt till lbtnEdit)och select (nedan döpt till lbtnSelect), men gör den OSYNLIG.
Sedan...
<code>
Private Sub datagrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgReport.ItemDataBound
'<Fetch and manipulate controls at their databind event>
Dim lit As ListItemType
Dim lbtn As LinkButton
lit = e.Item.ItemType
If Not (lit = ListItemType.Header Or lit = ListItemType.Footer Or lit = ListItemType.Pager) Then
'<Trigger row selecting as mouse moves>
lbtn = e.Item.FindControl("lbtnSelect")
If Not lbtn Is Nothing Then
e.Item.Attributes("onmouseover") = "javascript:setBackground(this,'#ffffe1')"
e.Item.Attributes("onmouseout") = "javascript:setBackground(this,'#ffffff')"
End If
'<Trigger row editing as mouse clicks>
lbtn = e.Item.FindControl("lbtnEdit")
If Not lbtn Is Nothing Then
e.Item.Attributes("onclick") = Page.GetPostBackClientHyperlink(lbtn, "")
End If
End If
End Sub
</code>
...där färgerna i setBackground givetvis kan ändras efter tycke.
Lägg sedan till följande lilla javascript:
<code>
function setBackground(obj,color){
obj.style.backgroundColor=color;</code>
}</code>
Tilläggas bör att det nu är hela rader man klickar på, inte celler, men Herr Sands funktion bör fungera ändå. Också celler kan göras klickbara tror jag...men då får vi meka lite.
Voilá!
Mvh/
Carl JohanSv: Hämta värden från en datagrid cell
En kommentar kring CInt kontra integer.Parse. (Överkurs - kan hoppas över)
Med risk för att låta fånig så är inte Cint särskilt .nettigt :-) Det är i alla fall det som rekommendationerna från Microsoft säger (faktiskt med just de orden).
Ivilketfallsomhelst så är det så pass enkelt att en Cint tar emot ett object och måste då utvärdera vad det är för typ av objekt först och om den kan omvandla det hela till en integer. Det behöver inte integer.parse och sålunda slipper du ett par rader MSIL-kod.
Om man dessutom tar en närmre titt på integer.parse så inser man ganska snabbt att det är en mer versitil funktionssamling. I dess överladdade typer kan man nämligen t ex ange på vilket sätt som strängen ska parsas.
<code>
Dim s As String = "11"
Dim i As Integer = Integer.Parse(s, System.Threading.Thread.CurrentThread.CurrentCulture)
</code>
I just detta fall är det naturligtvis krafs men jag vill höja ett varningens finger då det är en god vana att ta hänsyn till vilken miljö som din applikation ska köra i. Något inte helt ovanligt är att din miljö kör på svenska medan produktionsmiljön är på engelska. Då har du problem om du t ex har använt CDbl och det dyker upp ett komma och inte en punkt.
Grunden i detta handlar om att du som utvecklare måste lägga dig till med bra vanor i ditt kodande så att du inte står handfallen just den dag då dina förutsättningar ändrats och dessutom måst lägga många timmars arbete på att revidera din kod, något som ekonomiavdelningen inte brukar gilla (och säga vad man vill om ekonomer men makt har dem tyvärr).
På det kan vi dessutom lägga .net-frameworks miljö och dess tankar om object som grundtyp för allt. Omvandlingar till och från olika typer ska då göras och då gör du bäst i att använda det med objektorienterade sättet för omvanling som t ex Integer.Parse innebär (även om just DET är en värdetyp)
Nog mumlat nu Mikael. Börja jobba med digSv: Hämta värden från en datagrid cell
ha det
/Phinala