Det är inte GridView:en som har med det att göra, utan datakällan som du knyter till den. Med andra ord, kontrollera om tableSelectedItems innehåller en rad med samma id (mha av Select-metoden) innan du lägger till en ny rad.
I den övningsbok jag håller på med (Asp.net 2.0 steg för steg) så finns det
en övning där man lätt kan assosiera till en varukorg. Med det i minnet så
ville jag beskriva följande.
DataList1 fylls upp med ett antal produkter, och en knapp för varje produkt
skickar produkten till en gridview.
Nu skulle jag (i första steget) vilja se till att det inte finns mer än en av varje
produktyp i gridview.
I steg två, så skall jag försöka att lägga till en textruta (det blir väll en
templatefild), som vid första klicket ifrån datalist1 skall innehålla en etta.
För varje gång man klicka på produkten i datalist1, så skall templatefield
räknas upp, går detta?
Så här fyller jag gridviewn:
int nItemIndex = e.Item.ItemIndex;
this.DataList1.SelectedIndex = nItemIndex;
BindToInventory();//här hämtas data via en datatable
DataTable dt = (DataTable)DataList1.DataSource;
String strId=(dt.Rows[nItemIndex][0]).ToString();
String strTitel =
(dt.Rows[nItemIndex][1]).ToString();
String strAuthorLastName =
(dt.Rows[nItemIndex][2]).ToString();
String strAuthorFirstName =
(dt.Rows[nItemIndex][3]).ToString();
String strstrTopic =
(dt.Rows[nItemIndex][4]).ToString();
String strPublicher =
(dt.Rows[nItemIndex][5]).ToString();
DataTable tableSelectedItems;
tableSelectedItems =
(DataTable)Session["tableSelectedItems"];
DataRow dr = tableSelectedItems.NewRow();
dr[0] = strId;
dr[1] = strTitel;
dr[2] = strAuthorLastName;
dr[3] = strAuthorFirstName;
dr[4] = strstrTopic;
dr[5] = strPublicher;
tableSelectedItems.Rows.Add(dr);
Session["tableSelectedItems"] = tableSelectedItems;
this.GridView1.DataSource = tableSelectedItems;
this.GridView1.DataBind();
Första frågan hur hindrar jag att lägga till en rad till om den redan finns i
gridviewn?