• ベストアンサー

Dim BMB As BindingManagerBase 定義エラー

VB.NET2003Standardを使用しています。 MySQLと接続してDataGridに表示させていますが DataGrid上の選択された行の位置を調べたいのですが Dim bmb As BindingManagerBase = DataGrid1.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember) Dim dr As DataRow = CType(bmb.Current, DataRowView).Row とするとBindingManagerBaseが定義されていませんになってしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

お世話になります。 いつ、どのタイミングで選択された行の情報を取得したいのかが わかりませんが、 ButtonField の Button を押下された時と仮定すると、 こういう感じで何が選択されたのか取得することができます。 ■ASPX <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="vs2003_WebApplication1.WebForm1"%> <HTML>   <HEAD>     <title>WebForm1</title>   </HEAD>   <body>     <form id="Form1" method="post" runat="server">       <asp:DataGrid id="DataGrid1" runat="server">         <Columns>           <asp:ButtonColumn Text="選択" ButtonType="PushButton" CommandName="Select"></asp:ButtonColumn>         </Columns>       </asp:DataGrid>       <br>       <asp:Label id="Label1" runat="server">Label</asp:Label>     </form>   </body> </HTML> ■コードビハインド Public Class WebForm1   Inherits System.Web.UI.Page #Region " Web フォーム デザイナで生成されたコード " ' 省略 #End Region   Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     If Not Me.IsPostBack Then       Dim data As DataTable = New DataTable("TestTable")       ' DataTable 生成処理       With data         .Columns.Add("Field1", GetType(String))         .Columns.Add("Field2", GetType(String))         .Columns.Add("Field3", GetType(String))         .Rows.Add(New String() {"a", "b", "c"})         .Rows.Add(New String() {"aa", "bb", "cc"})         .Rows.Add(New String() {"aaa", "bbb", "ccc"})       End With       ' Bind       Me.DataGrid1.DataSource = data       Me.DataGrid1.DataBind()     End If   End Sub   Private Sub DataGrid1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.ItemCommand     If e.CommandName = "Select" Then       Dim field1Cell As TableCell = e.Item.Cells(1)       Dim field2Cell As TableCell = e.Item.Cells(2)       Dim field3Cell As TableCell = e.Item.Cells(3)       Me.Label1.Text = "Field1:" & field1Cell.Text & "<br>" & _       "Field2:" & field2Cell.Text & "<br>" & _       "Field3:" & field3Cell.Text     End If   End Sub End Class

fortranxp
質問者

お礼

数日かけて原因を調べていました。 よくよくみてみると If Not Me.IsPostBack Then が欠落しておりWEBを参照する度に 更新されていたということでした。 つまりPOSTが有れば更新してはいけない 訳でした。他にASP.NETで相談する相手が いないので大変助かりました。

fortranxp
質問者

補足

回答どうもです。 1.HTMLに追加 <Columns><asp:ButtonColumn Text="選択"ButtonType="PushButton" CommandName="Select"></asp:ButtonColumn></Columns> 2.以下以降を追加 Private Sub DataGrid1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.ItemCommand 3.Label1コントロールを追加。 4.データはMySQLクライアントとDataSet1を利用して  DataGrid1に表示する。 結果としてLabel1.textに表示されませんでした。 理解できたこと    <Columns>タグの利用の方法。 以上です。

関連するQ&A