- PR -

データグリッドコントロールの行選択について

1
投稿者投稿内容
Earth
会議室デビュー日: 2002/06/11
投稿数: 14
投稿日時: 2002-08-02 14:00
こんにちは、大賀です。

データグリッドコントロールの行選択を行いたいと考えてまして
サンプルを元に選択した行をアクティブにすることが出来たのですが・・
体裁を整えようとしたところ下記の選択ボタン(デフォルトはリンクボタン)を
プッシュボタンに変えたとたん、選択できなくなりました。

根本的な原因が解消できず困っています。
どなたか良い知恵がありましたらご教授ください。

「元」
<asp:ButtonColumn Text="選択" CommandName="Select">
</asp:ButtonColumn>
                  ↓
「変更後」
<asp:ButtonColumn Text="選択" ButtonType="PushButton" CommandName="Select">
</asp:ButtonColumn>

※「ButtonType="PushButton" 」を追加しただけです。その他の部分は変更していない
 ことを確認しています。

以上
かなめ
会議室デビュー日: 2002/07/15
投稿数: 16
お住まい・勤務地: 東京
投稿日時: 2002-08-02 14:09
こんにちは。かなめです。

私も同じような事象が出たことがあったのですが、
そのときには、PAGE_LOADの中で、
If Not IsPostBack Then
DataGrid1.DataBind()
End If
を入れたら、うまくいきました。
Earth
会議室デビュー日: 2002/06/11
投稿数: 14
投稿日時: 2002-08-07 10:20
返事が遅れてすいません。(夏休み中でした。)

かなめさんレスありがとうございました。

>If Not IsPostBack Then
>DataGrid1.DataBind()
>End If

を試してみましたが・・・駄目でした(泣)

他に何か原因とかあるのかな?
まあデザインの制約だけなんでそれほど困ってはいないですが
出来ないのがどうにも納得いかないで、他に対策はないでしょうか?

以上、よろしくお願いします。
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-08-07 10:34
>※「ButtonType="PushButton"」を追加しただけです。その他の部分は変更していない
>ことを確認しています。

僕もハマりまくりましたが、どうもPUSHBUTTONにすると、SelectedIndexChangedイベントで反応が無くなるようです。

ボタンにした場合には、どうもItemCommandイベントにしなければならないようです。サンプルソースは以下の通りです。

Private Sub DataGrid1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles FOLR.ItemCommand

If (e.CommandName = "Select") Then

End If
End Sub

という感じになります。IF文の中に選択関係の構文を入れるようになるのですが、結局めんどくさいので、僕もデザイン的には気にくわないながら、LINKで使っています(笑)
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
Earth
会議室デビュー日: 2002/06/11
投稿数: 14
投稿日時: 2002-08-07 11:07
うりゅうさんレスありがとうございました。

>僕もハマりまくりましたが、どうもPUSHBUTTONにすると、SelectedIndexChanged
>イベントで反応が無くなるようです。

これは・・仕様なのかな(バグでなく)

>ボタンにした場合には、どうもItemCommandイベントにしなければならないようです。
>サンプルソースは以下の通りです。

回避策とサンプルをありがとうございます。
サンプルを参考に動作は確認できました。
たしかに・・めんどくさいんでLINKで「文字:■」を使用してデザインに妥協します。

なんとか解決?しました。

以上、ありがとうございました。
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2003-01-09 20:29
今さらなんですが、別の場所でこのスレッドへのリンクを見たので、調べました。で、その別の場所にもポストしたのですが、当方では再現しません。バグって感じでスレが終わっていてどうも気になるので、再現できないaspxをポストします。どなたかやってみてください。
コード:
<%@Page Language="C#"%>
<%@Import Namespace="System.Data"%>
<%@Import Namespace="System.Data.SqlClient"%>
<html>
<script runat="server">
void Page_Load(object s, System.EventArgs e) {
  if (!(IsPostBack)) {
    BindGrid();
  }
}
void CUST(object s, DataGridCommandEventArgs e) {
  if (e.CommandName.Equals("Custom1")|| e.CommandName.Equals("Custom2"))
    Response.Write(e.Item.ItemIndex.ToString());
}
void SEL(object s, System.EventArgs e){
  Response.Write(Grid1.SelectedIndex.ToString());
}
void BindGrid() {
  SqlConnection cn = new SqlConnection("Data Source=(local);User ID=user1;Password=pass1;Initial Catalog=Northwind");
  SqlCommand cmd = cn.CreateCommand();
  cmd.CommandText = "SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice, Discontinued FROM Products";
  SqlDataAdapter da = new SqlDataAdapter();
  da.SelectCommand = cmd;
  DataSet ds = new DataSet();
  da.Fill(ds, "Products");
  cn.Close();
  Grid1.DataSource = ds;
  DataBind();
}  
</script>
<body><form runat="server">
<asp:DataGrid id="Grid1" runat="server" AutoGenerateColumns="false"
 OnSelectedIndexChanged="SEL" OnItemCommand="CUST">
  <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#008A8C" />
  <Columns>
    <asp:ButtonColumn CommandName="Custom1" Text="Custom1" />
    <asp:ButtonColumn CommandName="Custom2" ButtonType="PushButton" Text="Custom2" />
    <asp:ButtonColumn CommandName="Select" Text="Select1" />
    <asp:ButtonColumn CommandName="Select" ButtonType="PushButton" Text="Select2" />
    <asp:BoundColumn DataField="ProductName" HeaderText="ProductName" />
    <asp:BoundColumn DataField="QuantityPerUnit" HeaderText="QuantityPerUnit" />
    <asp:BoundColumn DataField="UnitPrice" HeaderText="UnitPrice" />
  </Columns>
</asp:DataGrid>  
</form></body>
</html>


PushでもリンクでもSelectedIndexChangedイベントはきちんと発生します。.NET Framework SP2で確認しました。
1

スキルアップ/キャリアアップ(JOB@IT)