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.
|