21. maj 2008 - 11:12
Der er
17 kommentarer og 1 løsning
Customize GridView
Hej. Jeg henter noget data ud af min database med LINQ, med eks. var adressbookContacts = (from ac in db.Contacts where ac.AdressbookID == adressbookID select ac); og binder dem til et GridView med: GridView1.DataSource = adressbookContacts; Gridview1.DataBind(); Det går også helt fint. Nu er mit spørgmål så, hvordan kan jeg forme mit GridView som jeg vil. Jeg vil gerne have det sådan at der er et link/knap man kan trykke på også bliver der kaldt en metode i min code beheind fil eks. addContact(contactID) hvor contactID er værdien fra et felt i min database. How to do this? \\ Rune
Annonceindlæg fra GlobalConnect
i aspx kode kan du smide en templatefield ind i bunden af gridview kode. som her... <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Cow_id" DataSourceID="ObjectDataSource1" onselectedindexchanged="GridView1_SelectedIndexChanged"> <Columns> <asp:BoundField DataField="Cow_id" HeaderText="Cow_id" ReadOnly="True" SortExpression="Cow_id" /> <asp:BoundField DataField="Cow_number" HeaderText="Cow_number" SortExpression="Cow_number" /> <asp:BoundField DataField="Raceforkortelse" HeaderText="Raceforkortelse" SortExpression="Raceforkortelse" /> <asp:TemplateField> <ItemTemplate> <asp:Button ID="Button1" OnClick="Button1_Onclick" runat="server" CausesValidation="false" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> og så i codebehind på button click event protected void Button1_Onclick(object sender, EventArgs e) { Button Button1 = (Button)sender; GridViewRow grdRow = (GridViewRow)Button1.Parent.Parent; string CowID = grdRow.Cells[0].Text; //og så gøre whatever du vil... }
kan os ske fra designer sef. men det er letter at vise med kode...
har "CausesValidation" til false fordi jeg loader nyt vindue med buttun click event, det er bare ikke vist i codebehind koden jeg har postet her...
Jeg er helt ny ud i brugen af GridView, så spørger lige dumt =) <asp:BoundField DataField="Cow_id" HeaderText="Cow_id" ReadOnly="True" SortExpression="Cow_id" /> DataField er navnet på kolonnen i min database, eller navnet på feltet i min LINQ til SQL klasse?
det er autogenereret kode, der fremkommer når jeg vælger datasource i form af den ObjectDataSource1 der er angivet i gridviwet, men ja det er feltet i DB. det kunne ligesågodt være en SQldatasource eller noget der blev brugt.
ps. er selv ik så rutineret så... men dette virker fint her hos mig. :O) har du oprettet en datasource som dit gridview bruger på nuværende tidspunkt ?
evt smid din kode, husk at sløre din connectionstring vhis den er i din kode.
GridView: <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Cow_id" DataSourceID="contacts" /> <Columns> <asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True" SortExpression="Name" /> <asp:TemplateField> <ItemTemplate> <asp:Button ID="Button1" runat="server" CausesValidation="false" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> Koden der gerne skulle fylde mit GridView: DataStoreDataContext db = new DataStoreDataContext(); var contacts = from c in db.Contacts where c.AdressbookID == Convert.ToInt32(ddAdressBooks.SelectedValue.ToString()) select c; GridView1.DataSource = contacts; GridView1.DataBind(); Men det resultere i følgende fejl:
DataSourceID'et for 'GridView1' skal være id'et for et kontrolelement af typen IDataSource. Der blev ikke fundet et kontrolelement med id 'contacts'.
Ja, okay. Jeg brugte wizarden og wupti, så stod koden der jo. (det er ikke altid det er lige smart at være stædig =)) Nu skal jeg så bare have lavet det felt til knappen. til at virke efter hensigten, så skal jeg nok lukke spg =)
når du binder fra codebehind emner jeg ik du skal du ikke sætte datasourceID til noget i aspx siden. så skal kode for grid bare se sådan ud -> (vil jeg mene) <asp:GridView ID="GridView1" runat="server"> <Columns> <asp:TemplateField HeaderText="Knap"> <ItemTemplate> <asp:Button ID="Button1" runat="server" Text="Tryk" CausesValidation="false" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
Et enkelt spørgsmål mere. <asp:TemplateField> <ItemTemplate> <asp:Button ID="Button1" OnClick="Button1_Onclick" runat="server" CausesValidation="false" /> </ItemTemplate> </asp:TemplateField> Hvordan får jeg en ID sat ind i den metode jeg kalder, eks. en værdi fra min database. eks: <asp:Button ID="Button1" OnClick="Button1_Onclick(21)" runat="server" CausesValidation="false" />
så vidt jeg ved så kan du ik på den måde... se øverste post hvor det sker i codebehind med at vælge cellen ud og bruge indholdet...
den tger så ugangspunkt i at du har din id ="21" vist i gridviewet.. i celle "0"
ahh, fik det til at virke, mange tak for hjælpen =)
brugte du mit svar så husk at acceptere... :O)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.