- - PR -
GridView TemplateFieldを使った時のUpdate
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2009-01-21 16:22
お世話になります。VB.NET初心者です。どなたか,どうか教えて下さい。
(初回投稿資料が見づらいものだったので,改めさせて頂きました。) GridViewのTemplateField内にボタンやテキストボックスを配置してDBと連携して データを更新するWeb画面を作っています。編集ボタン押下後,テキストボックス の値を書き換え,更新ボタンを押下するとDB更新とGridViewの表示内容が変わる という初歩的な処理を作っていますが,更新ボタンを押下しても書き換えた内容 がDBおよび画面に反映されません。当@ITの連載記事を元にやったのですが出来ま せんでした。記事を参考にしたのは,VBコードの「GridView1_RowUpdating」部分 です。TemplateFieldを使っているのは,新規追加行を作りたかったため,そうし ています。 開発環境:MS-VisualWebDeveloper2008ExpressEdition 言語:VB DB:MS-SQLServer2005ExpressEdition HTMLソース:以下のとおりです。 <%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="MstBusinessPhase.aspx.vb" Inherits="MstBusinessPhase" %> ・ ・ ・ 【SQLデータソース】 <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:strConString %>" ProviderName="<%$ ConnectionStrings:strConString.ProviderName %>" ConflictDetection="OverwriteChanges" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT [A], [B], [C] FROM [table1] WHERE (([A] LIKE '%' + @A + '%') AND ([B] LIKE '%' + @B + '%') AND ([C] LIKE '%' + @C + '%'))" DeleteCommand="DELETE FROM [table1] WHERE [A] = @original_A" InsertCommand="INSERT INTO [table1] ([A], [B], [C]) VALUES (@A, @B, @C)" UpdateCommand="UPDATE [table1] SET [B] = @B, [C] = @C WHERE [A] = @original_A"> <SelectParameters> <asp:ControlParameter ControlID="txtA" DefaultValue="%" Name="A" PropertyName="Text" Type="String" /> <asp:ControlParameter ControlID="txtB" DefaultValue="%" Name="B" PropertyName="Text" Type="String" /> <asp:ControlParameter ControlID="txtC" DefaultValue="%" Name="C" PropertyName="Text" Type="String" /> </SelectParameters> <DeleteParameters> <asp:Parameter Name="original_A" Type="String" /> <asp:Parameter Name="original_B" Type="String" /> <asp:Parameter Name="original_C" Type="String" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name="original_A" Type="string" /> <asp:Parameter Name="B" Type="String" /> <asp:Parameter Name="C" Type="String" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="A" Type="String" /> <asp:Parameter Name="B" Type="String" /> <asp:Parameter Name="C" Type="String" /> </InsertParameters> </asp:SqlDataSource> 【GridView】 <asp:GridView ID="GridView1" runat="server"・・・ <Columns> <asp:TemplateField ShowHeader="False"> <ItemTemplate> ・・・ 編集ボタン/削除ボタンを配置 ・・・ </ItemTemplate> <EditItemTemplate> ・・・ 更新ボタン/中止ボタンを配置 ・・・ </EditItemTemplate> <FooterTemplate> ・・・ 追加ボタンを配置 ・・・ </FooterTemplate> </asp:TemplateField> 【データA列】 <asp:TemplateField HeaderText="データA"> <ItemTemplate> <asp:Label ID="lblA" runat="server" Text='<%# Eval("A") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:Label ID="lblA" runat="server" Text='<%# Eval("A") %>'></asp:Label> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtA_Insert" runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> 【データB列】 <asp:TemplateField HeaderText="データB"> <ItemTemplate> <asp:Label ID="lblB" runat="server" Text='<%# Eval("B") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtB" runat="server" Text='<%# Bind("B") %>'></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtB_Insert" runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> 【データC列】 <asp:TemplateField HeaderText="データC"> <ItemTemplate> <asp:Label ID="lblC" runat="server" Text='<%# Eval("C") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:Label ID="lblC" runat="server" Text='<%# Eval("C") %>'></asp:Label> </EditItemTemplate> <FooterTemplate> <asp:Label ID="lblC_Insert" runat="server"></asp:Label> </FooterTemplate> </asp:TemplateField> </Columns> <EmptyDataTemplate> ・・・ データ0件用に定義 ・・・ </EmptyDataTemplate> </asp:GridView> VBコード:以下のとおりです。 Imports System.Data Imports System.Data.SqlClient Partial Class MaterPage Inherits System.Web.UI.Page ・ ・ ・ 【行の更新処理】 Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating 'データA列をKeyとして更新 'データB列は,画面入力値よりDB更新 'データC列は,B列を更新した日付をプログラムでセット Dim KoushinDate As String = Format(Now(), "yyyyMMddHHmmss") Dim row As GridViewRow = GridView1.Rows(e.RowIndex) Dim txtBox As TextBox = DirectCast(row.FindControl("txtB"), TextBox) e.NewValues("B") = txtBox.Text e.NewValues("C") = KoushinDate End Sub 評価式(Eval,Bind)の部分で足りないところがあるのでしょうか? 評価式に値を入れてやることにより,更新後のGrid表示内容とDB内容が 変わるのではないのでしょうか? 初心者で言葉足らずの部分もあるかと思いますが,宜しくお願い致します。 [ メッセージ編集済み 編集者: ちゃい 編集日時 2009-01-26 13:26 ] |
|
投稿日時: 2009-01-30 17:39
お騒がせして申し訳ありませんでした。ちゃい本人です。
初歩的なモレがあったため,できない状態でした。 次のKEYをGridViewに追記することにより解決しました。 <asp:GridView ID="GridView1" runat="server"・・(略)・・DataKeyNames="A"> どうもすみませんでした。 今後とも宜しくお願い致します。 以 上 |
1