Zoufalost s GridView   otázka

ASP.NET WebForms

Dobrý den,

potýkám se s velkým problémem ohledně GridView. Potřeboval bych mít možnost editovat načtená data. Níže uvádím kód, který funguje naprosto bez problémů:

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" AllowSorting="True">
            <Columns>
                <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
                <asp:BoundField DataField="mena" HeaderText="Měna" SortExpression="pozice" />
                <asp:BoundField DataField="komentar" HeaderText="Komentář" SortExpression="komentar" />
                <asp:CommandField ShowEditButton="True" />
            </Columns>
        </asp:GridView>

        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
		ConnectionString="Provider=SQLOLEDB;Password=bb;Persist Security Info=True;User ID=aa;Initial Catalog=iScalaDB;Data Source=WINSERVERNEW"
                ProviderName="System.Data.OleDb"
		SelectCommand='SELECT "ID", "mena", "komentar" FROM "aaa_test" WHERE "ID" =?'
 		UpdateCommand='UPDATE "aaa_test" SET "mena" = ?, "komentar" = ? WHERE "ID" =?'>

            <SelectParameters>
                <asp:QueryStringParameter Name="ID" QueryStringField="ID" Type="Int32" />
            </SelectParameters>

	    <UpdateParameters>
                <asp:Parameter Name="mena" Type="Int32" />
                <asp:Parameter Name="komentar" Type="String" />
                <asp:Parameter Name="ID" Type="Int32" />
	    </UpdateParameters>

 	</asp:SqlDataSource>

Následující kód už ovšem nefunguje (Pro jeden nebo více požadovaných parametrů nebyla zadána žádná hodnota.

):

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" AllowSorting="True">
            <Columns>
                <asp:BoundField DataField="id_pom" HeaderText="ID" SortExpression="id_pom" />
                <asp:BoundField DataField="c_nabidky" HeaderText="Nabídka" SortExpression="nabidka" />
                <asp:BoundField DataField="skl_kod" HeaderText="Skladový kód" SortExpression="skl_kod" />
                <asp:BoundField DataField="cenakg" HeaderText="Cena / kg" SortExpression="cenakg" />
                <asp:CommandField ShowEditButton="True" />
            </Columns>
        </asp:GridView>

        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
		ConnectionString="Provider=SQLOLEDB;Password=bb;Persist Security Info=True;User ID=aa;Initial Catalog=iScalaDB;Data Source=WINSERVERNEW"
                ProviderName="System.Data.OleDb"
		SelectCommand='SELECT "id_pom", "c_nabidky", "skl_kod", "cenakg" FROM "aaa_test2" WHERE "c_nabidky"=?'
 		UpdateCommand='UPDATE "aaa_test2" SET "id_pom" = ?, "c_nabidky" = ?, "skl_kod" = ?, "cenakg" = ? WHERE "id_pom" = ?'>

            <SelectParameters>
                <asp:QueryStringParameter Name="c_nabidky" QueryStringField="ID" Type="Int32" />
            </SelectParameters>

	    <UpdateParameters>
                <asp:Parameter Name="id_pom" Type="Int32" />
                <asp:Parameter Name="c_nabidky" Type="Int32" />
                <asp:Parameter Name="skl_kod" Type="String" />
                <asp:Parameter Name="cenakg" Type="Decimal" />
	    </UpdateParameters>

 	</asp:SqlDataSource>

Potýkám se s tím několik dní a jsem již naprosto zoufalý... Zjistil jsem takové šílenosti, jako že v UPDATE dotazu musí být pořadí sloupců stejné jako u SELECT či že v Updateparameters musí být proměnné ve stejném pořadí jako v UPDATE dotazu, jinak update nefunguje (ozkoušeno na tom funkčním výše)!

Pokud použiju variantu, kde za hodnoty místo ? dám @něco, to nefunguje vůbec s chybovou hláškou o nutnosti zaregistrovat proměnné či tak něco.

Byl bych každému nesmírně vděčný za jakoukoliv radu, jsem z toho zoufalý a vůbec nevím, jak dál. Přitom je příklad primitivní a je jen moje blbost, že tomu nerozumím:-(.

Děkuji předem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Máte nějaký určitý důvod proč používáte OleDB?

Jinak ten update command máte správně ,jen bych ho upravil trochu:

UpdateCommand="UPDATE aaa_test2 SET id_pom=?,c_nabidky=?,skl_kod=?, cenakg=? WHERE id_pom="

Je to dost hrozný zápis,co se pohledu týče.Pokud byste využíval standardní přístup k MSSQL,tak by byl zápis:

UpdateCommand="UPDATE aaa_test2 SET id_pom=@id_pom,c_nabidky=@c_nabidky,skl_kod=@skl_kod,cenakg=@cenakg WHERE id_pom=@id_pom"

Další věci je,co za chybu Vám to dělá - je zobrazena error hláška,nic se nestane,...?Chtělo by to ale nejdříve našprtat základy,takhle řešíte něco o čem nic nevíte.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Zdravim,

Pouzivate SQLOLEDB provider, ten funguje trosku jinak nez klasicky MSSQL.

Vsimnete si, ze ve vase UPDATE dotazu mate 5 parametru '?'. Ale asp parametru <UpdateParameters> mate jen 4. Proto vam to stale napovida: "(Pro jeden nebo více požadovaných parametrů nebyla zadána žádná hodnota)".

Tim 5tym parametrem je opet onen id_pom, ktery mate za WHERE v dotazu.

            <UpdateParameters>
                <asp:Parameter Name="?" Type="Int32" /> // pro sloupcec id_pom
                <asp:Parameter Name="?" Type="Int32" /> // pro sloupcec c_nabidky
                <asp:Parameter Name="?" Type="String" /> // pro sloupce sl_kod
                <asp:Parameter Name="?" Type="Decimal" /> // pro sloupce cenakg
                <asp:Parameter Name="?" Type="Int32" /> // znovu pro sloupec id_pom
	    </UpdateParameters>

Navic jmeno parametru <asp:Parameter Name=" ... by mel byt ? tak jak mate v dotazu. id_pom = ?, chybne tam davate jmeno sloupce, ktere stejne ignoruje, to vas mozna matlo. Protoze se vsechny parametry jmenuji "?", tak se berou podle poradi jak jdou zasebou. Mate 5 parametru "?" v dotazu, musite definovat 5 parametru v <UpdateParametes>.

Snad vam to pomuze

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback