Hente data ud af DataGrid på OnCommand
Hej,Jeg har et DataGrid med 5 kolonner. Den første kolonne indeholder en LinkButton, de næste 4 data. Ved klik på LinkButton i den første kolonne ønsker jeg at hive data ud for den pågældende række. For at gøre dette har jeg tilføjet en OnCommand event til min LinkButton som kalder metoden Add(). I Add() prøver jeg så at hive data ud, men det har jeg lidt problemer med.
Jeg prøver at lave et DataRowView, og det "lykkedes" som sådan også, men viewet er bare null. Jeg kan godt hente data ud hvis jeg bruger FindControl(), men det er en smule omsonst syntes jeg.
Er der nogle der kan hjælpe?
Koden følger herunder:
<asp:DataGrid ID="dgItems" OnItemDataBound="ItemBound" Runat="server"
<Columns>
<asp:TemplateColumn SortExpression="authorname" HeaderStyle-Width="16">
<HeaderTemplate>-</HeaderTemplate>
<ItemTemplate><asp:LinkButton ID="lbButton" Runat="server" OnCommand="Add">+</asp:LinkButton></ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>Navn</HeaderTemplate>
<ItemTemplate><asp:HyperLink ID="hlName" Runat="server" /></ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>Titel</HeaderTemplate>
<ItemTemplate><asp:HyperLink ID="hlTitle" Runat="server" /></ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>Dato</HeaderTemplate>
<ItemTemplate><%# DataBinder.Eval(Container, "DataItem.date", "{0:d}") %></ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>Pris</HeaderTemplate>
<ItemTemplate><%# DataBinder.Eval(Container, "DataItem.price", "{0:c}") %></ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
protected void ItemBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataRowView drv = (DataRowView)e.Item.DataItem;
if(drv != null)
{
LinkButton lbButton = (LinkButton)e.Item.FindControl("lbButton");
lbButton.CommandArgument = e.Item.ItemIndex.ToString();
}
}
}
protected void Add(object sender, CommandEventArgs e)
{
HyperLink hlName = (HyperLink)dgItems.Items[Convert.ToInt32(e.CommandArgument)].FindControl("hlName");
/* Via hlName kan jeg nu få fat i data i kolonne 2 for den pågældende række,
* men kolonne 4 og 5 indeholder f.eks. ingen kontroller, så data for disse kolonner
* kan jeg ikke få fat på.
*/
DataRowView drv = (DataRowView)dgItems.Items[Convert.ToInt32(e.CommandArgument)].DataItem;
/*
* Vha. drv["feltnavn"] burde jeg nu kunne få fat i de forskellige felter, men drv
* er null, hvorfor det?
*/
}