webForumDet fria alternativet

Funderingar om GridView

.NET

6 svar · 464 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

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?

Medlem sedan dec. 19996 721 inlägg
#2

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.

Medlem sedan mars 20011 880 inlägg
#3

Är det någonting så här du menar?

 if (Convert.ToInt32(tableSelectedItems.Columns[0])!= nItemIndex)

Jag får ett error att det inte går att omvandla...

Medlem sedan dec. 19996 721 inlägg
#4

emission skrev:

(mha av Select-metoden)

Använd Select på din datatable

Medlem sedan mars 20011 880 inlägg
#5

Nu är vi inne på saker som jag aldrig har sysslat med tidigare. Skulle du vilja utvekla detta?

Medlem sedan dec. 19996 721 inlägg
Medlem sedan mars 20011 880 inlägg
#7

Jag tyckte att jag hadde en bra början på det här men...
JAG gjorde ett litet försök så här:

string strExpr;
        string strText;

        DataRow[] foundRows;
        DataTable myTable;
        myTable = tableSelectedItems;
        strExpr = "ID=" + nItemIndex;
        foundRows = myTable.Select(strExpr);
        strText = null;

        for (int i = 0; i <= foundRows.GetUpperBound(0); i++)
        {
            for (int j = 0; j <= foundRows[i].ItemArray.GetUpperBound(0); j++)
            {
                strText = strText + foundRows[i][j].ToString() + "\t";
            }
            strText = strText + "\r\n";
            Label1.Text = strText;
        }

När jag hadde en träff, så skulle väll det synas i labelen?
JAG får aldrig ut någonting där.

260 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)