C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: GridViewの編集機能でテキストボックスの編集後の値sy


(過去ログ 126 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■74894 / inTopicNo.1)  GridViewの編集機能でテキストボックスの編集後の値sy
  
□投稿者/ とし (14回)-(2015/02/06(Fri) 15:24:37)

分類:[.NET 全般] 

環境は以下の環境で行っています。
2003Server,IIS V6.0,Access2000,IE8
ASP.NET開発: Visual Web Developer2010

GridViewの標準編集機能でテキストボックスの編集後の値を取得したいのですがうまく取得できません。

以前にADO.NET ライブラリで直接Accessに挿入INSERTクエリ操作する質問をさせて頂いて
更新DELETEのパターンもうまくいったのですが・・・

編集後に編集ボタンをクリックした後に変更後の値で更新処理Updateを行いたい


Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs)

If e.CommandName = "Update" Then


Dim rowIndex As Integer = Convert.ToInt32(e.CommandArgument)
Dim gridView As GridView = DirectCast(sender, GridView)
Dim row As GridViewRow = GridView1.Rows(rowIndex)

Dim Seq As String = row.Cells(1).Text(主キー)
Dim Genka As String = row.Cells(2).Text(主キー)
Dim Koutei As String = row.Cells(3).Text(主キー)
Dim Syubetsu As String = row.Cells(4).Text
      中略
Dim Gaku As String = row.Cells(10).Text

この後AccessDBにOleDbで接続し変更後の値で更新処理


Seq・Genka・Kouteiの値は取得できます。
Syubetsu以降は編集のテキストボックスで""になります

※標準の編集機能だと更新されないためADO.NET ライブラリで直接Access更新しようと思っています。
標準機能で他のテーブルは更新出来るけど今回のテーブルは更新出来ない?


宜しくお願いします。
引用返信 編集キー/
■74895 / inTopicNo.2)  Re[1]: GridViewの編集機能でテキストボックスの編集後の値sy
□投稿者/ WebSurfer (494回)-(2015/02/06(Fri) 17:17:13)
No74894 (とし さん) に返信

詳しく書いてないので想像ですが・・・

row.Cells(1) 〜 (3) と違って、row.Cells(4) にはその中の子コントロールとして TextBox が存在
していて、その TextBox.Text プロパティの値を取得しないとダメということではないですか?
引用返信 編集キー/
■74900 / inTopicNo.3)  Re[1]: GridViewの編集機能でテキストボックスの編集後の値sy
□投稿者/ WebSurfer (495回)-(2015/02/07(Sat) 12:53:34)
No74894 (とし さん) に返信

誤記があったので訂正します。

誤: row.Cells(1) 〜 (3) と違って、row.Cells(4) には・・・
   ↓
正: row.Cells(1) 〜 (3) と違って、row.Cells(4) 〜 (10) には・・・



先の私のレスの意味が分かるでしょうか?

例えば、GridView が以下のようになっているとすると(ProductID は主キーで BoundField
の ReadOnly="True" に注目)、

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AutoGenerateColumns="False" DataKeyNames="ProductID" 
    DataSourceID="ObjectDataSource1" 
    onrowcommand="GridView1_RowCommand">
    <Columns>
        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" 
            ShowSelectButton="True" ButtonType="Link" />
        <asp:BoundField DataField="ProductID" HeaderText="ProductID" 
            InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
        <asp:BoundField DataField="ProductName" HeaderText="ProductName" 
            SortExpression="ProductName" />
        ・・・略・・・
    </Columns>
</asp:GridView>

その場合、ある行を「編集」モードにすると、ProductID の文字列はテーブルのセルの中に直
接含まれるのに対し、ProductName の文字列はセルの中にテキストボックスがあってそれに含
まれます。(見た目でわかります)

従って、[更新]ボタンをクリックして GridView.RowCommand で ProductName の文字列を取
得するには、当該セルの子コントロールの中から TextBox を探して、その Text プロパティか
ら取得することになります。

具体的には以下にようにすれば取得できます。(C# ですが読めますか?)

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Update")
    {
        int editIndex = ((GridView)sender).EditIndex;
        GridViewRow row = ((GridView)sender).Rows[editIndex];
        string id = row.Cells[1].Text;

        foreach (Control control in row.Cells[2].Controls)
        {
            if (control is TextBox)
            {
                string productName = ((TextBox)control).Text;
            }
        }
    }
}

引用返信 編集キー/
■74919 / inTopicNo.4)  Re[2]: GridViewの編集機能でテキストボックスの編集後の値sy
□投稿者/ とし (15回)-(2015/02/09(Mon) 16:17:57)
No74900 (WebSurfer さん) に返信
> ■No74894 (とし さん) に返信
>
> 誤記があったので訂正します。
>
> 誤: row.Cells(1) 〜 (3) と違って、row.Cells(4) には・・・
>    ↓
> 正: row.Cells(1) 〜 (3) と違って、row.Cells(4) 〜 (10) には・・・
>
>
>
> 先の私のレスの意味が分かるでしょうか?
>
> 例えば、GridView が以下のようになっているとすると(ProductID は主キーで BoundField
> の ReadOnly="True" に注目)、
>
> <asp:GridView ID="GridView1" runat="server" AllowPaging="True"
> AutoGenerateColumns="False" DataKeyNames="ProductID"
> DataSourceID="ObjectDataSource1"
> onrowcommand="GridView1_RowCommand">
> <Columns>
> <asp:CommandField ShowDeleteButton="True" ShowEditButton="True"
> ShowSelectButton="True" ButtonType="Link" />
> <asp:BoundField DataField="ProductID" HeaderText="ProductID"
> InsertVisible="False" ReadOnly="True" SortExpression="ProductID" />
> <asp:BoundField DataField="ProductName" HeaderText="ProductName"
> SortExpression="ProductName" />
> ・・・略・・・
> </Columns>
> </asp:GridView>
>
> その場合、ある行を「編集」モードにすると、ProductID の文字列はテーブルのセルの中に直
> 接含まれるのに対し、ProductName の文字列はセルの中にテキストボックスがあってそれに含
> まれます。(見た目でわかります)
>
> 従って、[更新]ボタンをクリックして GridView.RowCommand で ProductName の文字列を取
> 得するには、当該セルの子コントロールの中から TextBox を探して、その Text プロパティか
> ら取得することになります。
>
> 具体的には以下にようにすれば取得できます。(C# ですが読めますか?)
>
> protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
> {
> if (e.CommandName == "Update")
> {
> int editIndex = ((GridView)sender).EditIndex;
> GridViewRow row = ((GridView)sender).Rows[editIndex];
> string id = row.Cells[1].Text;
>
> foreach (Control control in row.Cells[2].Controls)
> {
> if (control is TextBox)
> {
> string productName = ((TextBox)control).Text;
> }
> }
> }
> }

WebSurfer さん
いつも回答ありがとうございます。

教えて頂いたコードをvbに変換して下記の様に記述した所ボタンクリック時の値を取得する事が出来ました。

Dim editIndex As Integer = CType(sender, GridView).EditIndex
Dim row1 As GridViewRow = CType(sender, GridView).Rows(editIndex)
Dim id As String = row1.Cells(1).Text

For Each control As Control In row.Cells(4).Controls
If (TypeOf control Is TextBox) Then
Dim Syubetsu As String = CType(control, TextBox).Text
End If

Next

Cells(4)〜Cells(10)まで作成して値の取得して更新処理を行いたいと思います。

またしても
WebSurfer さんのお陰で次の処理に移る事が出来ます。感謝です。

また、悩んだら質問させて頂きたいと思います。
その時はまたお力添えをお願い致します。
宜しくお願い致します。
解決済み
引用返信 編集キー/
■74921 / inTopicNo.5)  Re[3]: GridViewの編集機能でテキストボックスの編集後の値sy
□投稿者/ WebSurfer (499回)-(2015/02/09(Mon) 21:41:20)
No74919 (とし さん) に返信

RowCommand イベントのハンドラで処置するより、もっと簡単な方法があると思います
のでそちらの方も考えた方が良いのでは?

RowUpdating イベントのハンドラの引数 GridViewUpdateEventArgs オブジェクトから
取得するとか、さらに簡単に AccessDataSource のようなデーターソースコントロール
を使用するなど。

特に後者を利用すると開発工数・保守工数が大幅に削減できると思います。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -