Hej! Det är väl kul att folk vill hjälpa andra sedan om det är en Normén så är det väl en ära ;) Har provat AutoGenerateColumns=false. När jag kör nu visas inget data alls i griden. La du till När du kör med AutoGenerateColumns=false så måste du skapa kolumnerna själv t ex. så här: Det fixade sig. Lösningen blev typ detta:Datagrid-hemligheter
Datagriden i ASP.NET döljer fortfarande sin väl förborgade hemligheter för mig. Jag hämtar personuppgifter från en databas till en datatable mha datareader. Sedan sätter jag gridens datasource=datatablen och databinder. Därefter blir resultatet vad det blir och inte vad jag vill. Jag vill t.ex att första kolumnen skall vara klickbara länkar och att footer-raden skall innehålla text som jag själv tilldelar i koden. Javisst finns det en property builder till griden där man kan skapa sån't i designläget men när jag exekverar tar griden ingen hänsyn till det utan skapar sina egna kolumner som innehåller sökresultatet. Kan någon avslöja dessa hemligheter? /GöranSv: Datagrid-hemligheter
Har du satt AutoGenerateColumns till false?
Om du vill ha en länk i första kolumnen som ska även trigga ett command event så kan du tex göra följande:
<code>
<asp:datagrid AutoGenerateColumns="False" ..... >
<Columns>
....
<asp:TemplateColumn>
<ItemTemplate>
<asp:LinkButton runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.<din kolumn>")%>' CommandName="Select" CausesValidation="false"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
...
</asp:datagrid>
</code>
Hoppas att detta gav ett svar på din fråga.
Mvh Fredrik NorménSv: Datagrid-hemligheter
Här kan du se hur koden ser ut:
Private Sub HämtaFleraPersoner(ByVal PersonId As String)
Dim ds As DataSet = New DataSet("Resultat")
Dim dt As DataTable = ds.Tables.Add("Tabell")
Dim rad(1) As String
dt.Columns.Clear()
dt.Columns.Add("PersonId")
dt.Columns.Add("Namn")
cmdSQL.CommandText = "select * from vy_person where personid like '" + PersonId + "%'"
datRead = cmdSQL.ExecuteReader
Do While datRead.Read
rad(0) = Trim(CStr(datRead("personid")))
rad(1) = Trim(CStr(datRead("efternamn"))) + " " + Trim(CStr(datRead("fornamn")))
dt.Rows.Add(rad)
Loop
datRead.Close()
dgrPersoner.DataSource = dt
dgrPersoner.DataBind()
End Sub
Mvh GöranSv: Datagrid-hemligheter
<column> samt
<asp:TemplateColumn>
i din ASPX sida? innaför <ASP:DataGrid.....> </Datagrid> taggen?
//Johan NSv: Datagrid-hemligheter
<code>
<Columns>
<asp:BoundColumn DataField="[Fätet i databasen]" HeaderText="[Vad som ska stå i headern]">
osv....för varje kolumn
</Columns>
</code>
MVH
Andreas.NETSv: Datagrid-hemligheter
<asp:datagrid Id="dgrPersoner" AutoGenerateColumns="False"...>
<Columns>
<asp:ButtonColumn DataTextField="PersonId" HeaderText="PersonId"...>
</asp:ButtonColumn>
<asp:BoundColumn DataField="Namn" HeaderText="Namn">
</asp:BoundColumn>
<asp:BoundColumn Visible="False" DataField="PersonId">
</asp:BoundColumn>
</Columns>
</asp:datagrid>
Jag var alltså tvungen att göra en extra osynlig kolumn med mitt klickbara värde (personid) dels för att länk-kolumnen skulle visa värden överhuvud taget och dels för att kunna fånga personid vid klick på en rad. Det gjorde jag så här:
Private Sub dgrPersoner_SelectedIndexChanged(...
Dim PersonId as String
PersonId = dgrPersoner.SelectedItem.Cells(2).Text
End Sub
/Göran