Avatar billede rejx Nybegynder
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
Avatar billede knaldeglad Nybegynder
21. maj 2008 - 11:27 #1
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...

}
Avatar billede knaldeglad Nybegynder
21. maj 2008 - 11:28 #2
kan os ske fra designer sef. men det er letter at vise med kode...
Avatar billede knaldeglad Nybegynder
21. maj 2008 - 11:29 #3
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...
Avatar billede rejx Nybegynder
21. maj 2008 - 12:04 #4
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?
Avatar billede knaldeglad Nybegynder
21. maj 2008 - 12:14 #5
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.
Avatar billede knaldeglad Nybegynder
21. maj 2008 - 12:16 #6
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 ?
Avatar billede knaldeglad Nybegynder
21. maj 2008 - 12:21 #7
evt smid din kode, husk at sløre din connectionstring vhis den er i din kode.
Avatar billede rejx Nybegynder
21. maj 2008 - 12:31 #8
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:
Avatar billede rejx Nybegynder
21. maj 2008 - 12:32 #9
DataSourceID'et for 'GridView1' skal være id'et for et kontrolelement af typen IDataSource. Der blev ikke fundet et kontrolelement med id 'contacts'.
Avatar billede rejx Nybegynder
21. maj 2008 - 12:38 #10
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 =)
Avatar billede knaldeglad Nybegynder
21. maj 2008 - 12:44 #11
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>
Avatar billede knaldeglad Nybegynder
21. maj 2008 - 12:45 #12
ok :O)
Avatar billede rejx Nybegynder
21. maj 2008 - 12:54 #13
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" />
Avatar billede knaldeglad Nybegynder
21. maj 2008 - 12:55 #14
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...
Avatar billede knaldeglad Nybegynder
21. maj 2008 - 12:58 #15
den tger så ugangspunkt i at du har din id ="21" vist i gridviewet.. i celle "0"
Avatar billede rejx Nybegynder
21. maj 2008 - 13:08 #16
ahh, fik det til at virke, mange tak for hjælpen =)
Avatar billede knaldeglad Nybegynder
21. maj 2008 - 13:20 #17
brugte du mit svar så husk at acceptere... :O)
Avatar billede rejx Nybegynder
21. maj 2008 - 15:18 #18
Nå ja, undskyld =)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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