Avatar billede bergstein Nybegynder
13. februar 2009 - 23:44 Der er 11 kommentarer og
2 løsninger

asp.net / vb.net: Bruge data fra række ved klik i gridView

Hej.

Noget der i Delphi programmering for mig er let, kan jeg pludselig ikke gennemskue i webprogrammering  med vb.net.

Først en lille beskrivelse af, hvad jeg gerne vil opnå.

Jeg har på min .aspx webside en gridview, der henter data fra en tabel, som vises. Det e read-only.

Lad os antage, at der er en usynlig kolonne ID og x antal synlige kolonner til at vise data.

Når jeg klikker på en række, så har jeg brug for at hente en værdi i rækken (Her fra den usynlige kolonne ID) som skal bruges i mit kald til den næste webside.

Jeg mangler dels en onClick event på min grid og dels kan jeg ikke greje, hvordan jeg får hevet ID'værdien af den række, jeg klikkede på ud.
Avatar billede csvendsen Nybegynder
14. februar 2009 - 07:55 #1
Jeg har trukket lidt kode ud fra en af mine sider. Det er ganske vist en checkbox, men du kan nok tilpasse det til dit Gridview:

Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    Dim rowID As String = String.Empty
    Try
'<English> Use the RowType property to determine whether the
' row being created is the data row.
'<Dansk> Check om rækketype er data når rækker oprettes

  If e.Row.RowType = DataControlRowType.DataRow Then
    rowID = Convert.ToString(e.Row.RowIndex)
'<English> Create an ID to row with value as RowIndex
'<Dansk> Tilføj et ID til hver række med værdien af RækkeIndex.
    e.Row.Attributes.Add("id", Convert.ToString(e.Row.RowIndex))

'<English> Highlight row to handle on javascript function 'hightDataRow.
'Function is in /Javascript/GridViewS file.
'<Dansk> Highlight række via javascript function HighlightDataRow. Findes i script /Javascript/GridViewS.
        Dim cb As CheckBox = CType(e.Row.FindControl("CheckBox1"), CheckBox)
        cb.Attributes.Add("onclick", "changeColor(this);")

End If

Catch ex As Exception
  '<English> Show message on Error
  '<Dansk> Vis meddelelse ved fejl.
  Me.Label1.Text = ex.Message
End Try


End Sub

'Og her er et par linier af Javascriptet:
function changeColor(obj)
{
var rowObject = getParent(obj, 'TR');
var rowID = obj.id;

'Du kan så åbne en ny side med rowID som parameter
window.open('NySide.aspx?parameter=' + rowID);
}
Avatar billede dta Nybegynder
14. februar 2009 - 14:52 #2
Jeg vill bruge en <asp:ImageButton CommandArgument='<%# Eval("ID") %>' CommandName="Name" OnCommand="Btn_Click" /> i hver række

Og en tilhørende funktion

Sub Btn_Click(ByVal sender As Object, ByVal e As CommandEventArgs)
        Select Case e.CommandName
            Case "name"
                Server.redirect("http://minsude.aspx?id=" + CType(e.CommandArgument, Integer), True)

        End Select
    End Sub
Avatar billede bergstein Nybegynder
18. februar 2009 - 19:25 #3
Hej.

Vil i begge smide et svar, så får i points
Avatar billede dta Nybegynder
19. februar 2009 - 08:15 #4
Thx
Avatar billede csvendsen Nybegynder
20. februar 2009 - 09:13 #5
svar
Avatar billede bergstein Nybegynder
28. februar 2009 - 16:37 #6
Det var ikke et svar du gav. :o) Prøv igen
Avatar billede bergstein Nybegynder
28. februar 2009 - 16:46 #7
Jeg har prøvet det med

<asp:ImageButton CommandArgument='<%# Eval("ID") %>' CommandName="Name" OnCommand="Btn_Click" />

med uden held.

Hvordan implementerer man den?
Avatar billede dta Nybegynder
28. februar 2009 - 22:34 #8
Send din kode!
Avatar billede bergstein Nybegynder
28. februar 2009 - 23:54 #9
<asp:GridView ID="gridWebsider" runat="server" AutoGenerateColumns="False" DataSourceID="dsSider" CellSpacing="1" cellpadding="0" BorderStyle="None"
Width="100%" AllowPaging="True" AllowSorting="True" >
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID">
</asp:BoundField>           
<asp:BoundField DataField="Overskrift" HeaderText="Overskrift" SortExpression="Overskrift" />
<asp:BoundField DataField="Indhold" HeaderText="Indhold"
SortExpression="Indhold" >
</asp:BoundField>
<asp:BoundField DataField="Dato" HeaderText="Dato" SortExpression="Dato">
</asp:BoundField>
<asp:BoundField DataField="Forfatter" HeaderText="Forfatter"
SortExpression="Forfatter">
</asp:BoundField>   
</Columns>
<HeaderStyle CssClass="ListHeader" />
<RowStyle CssClass="ListData" BorderStyle="None" BackColor="#FFFFFF" />
<AlternatingRowStyle BorderStyle="None" BackColor="#FFFFFF" />
</asp:GridView>

og

Sub Btn_Click(ByVal sender As Object, ByVal e As CommandEventArgs)
        Select Case e.CommandName
            Case "name"
                Server.redirect("http://minsude.aspx?id=" + CType(e.CommandArgument, Integer), True)

        End Select
End Sub

Min første fejl er at redirect ikke er en del af namespacet http.web.serveritility

Kan det i øvrigt ikke laves således, at det er hele rækken man kan klikke på i stedet for kun imagebuttonen
Avatar billede bergstein Nybegynder
01. marts 2009 - 00:04 #10
Det er selvfølgelig indsat nedenstående mellem

<columns>
og
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID"></asp:BoundField>           

<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton CommandArgument='<%# Eval("ID") %>' CommandName="Name" OnCommand="Btn_Click" />
</ItemTemplate>
</asp:TemplateField>
Avatar billede csvendsen Nybegynder
01. marts 2009 - 07:07 #11
Undskyld, jeg fik vist ikke klikket på svar tidligere.
Et eksempel til kald af en javascript funktion :

Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
  'Check om rækketype er data når rækker oprettes i GridView1
  If e.Row.RowType = DataControlRowType.DataRow Then
    'Tilføj et ID til hver række med værdien af RækkeIndex.
    e.Row.Attributes.Add("id", Convert.ToString(e.Row.RowIndex))
    e.Row.Attributes.Add("onclick", "rowClick(this);")
  end if
end sub

'og i Javascript :
function rowClick(obj)
{
window.open('TestPage.aspx?id=' + obj.id);
}
Avatar billede dta Nybegynder
01. marts 2009 - 09:42 #12
Undskyld det hedder ikke server.redirect men response.redirect ellers ville jeg lave koden som endestående

<asp:GridView ID="gridWebsider" runat="server" AutoGenerateColumns="False" DataSourceID="dsSider" CellSpacing="1" cellpadding="0" BorderStyle="None"
Width="100%" AllowPaging="True" AllowSorting="True" >
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID">
</asp:BoundField>           
<asp:BoundField DataField="Overskrift" HeaderText="Overskrift" SortExpression="Overskrift" />
<asp:BoundField DataField="Indhold" HeaderText="Indhold"
SortExpression="Indhold" >
</asp:BoundField>
<asp:BoundField DataField="Dato" HeaderText="Dato" SortExpression="Dato">
</asp:BoundField>
<asp:BoundField DataField="Forfatter" HeaderText="Forfatter"
SortExpression="Forfatter">
</asp:BoundField>
<asp:TemplateField HeaderText="RedirectColum" SortExpression="RedirectColum">
  <ItemTemplate>
<asp:ImageButton CommandArgument='<%# Eval("ID") %>' CommandName="Name" OnCommand="Btn_Click" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle CssClass="ListHeader" />
<RowStyle CssClass="ListData" BorderStyle="None" BackColor="#FFFFFF" />
<AlternatingRowStyle BorderStyle="None" BackColor="#FFFFFF" />
</asp:GridView>

og

Sub Btn_Click(ByVal sender As Object, ByVal e As CommandEventArgs)
        Select Case e.CommandName
            Case "name"
                Response.redirect("http://minsude.aspx?id=" + CType(e.CommandArgument, Integer), True)

        End Select
End Sub
Avatar billede bergstein Nybegynder
01. marts 2009 - 11:33 #13
Endnu engang tak til jer begge.

Jeg brugte dta's løsning her (der nu virkede) men lærte noget af csvendsen, som jeg kan bruge i andre sammenhæng
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester