如何实现点DATAGRID的行的任意地方都可以触发行改变(或者说触发ItemCommand事件?)

时间:2022-11-11 10:31:44
如何实现点DATAGRID的行的任意地方都可以触发行改变(或者说触发ItemCommand事件?)
而不是点某个列.是点行的任意白区!

5 个解决方案

#1


你看看这个会不会有点帮助?

如何得到DataGrid中点击的当前行? 
作者:孟宪会 出自:【孟宪会之精彩世界】 发布日期:2003年6月18日 7点44分20秒
--------------------------------------------------------------------------------
 
下面的代码实现了如何得到点击的当前行的数据

GetCurrentClickRow.aspx

<%@ Page Language="vb" EnableViewState="False" AutoEventWireup="false" 
 Codebehind="GetCurrentClickRow.aspx.vb" Inherits="aspxWeb.mengxianhui.com.GetCurrentClickRow"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title>GetCurrentClickRow</title>
    <meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">
    <meta content="Visual Basic 7.0" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
  </HEAD>
  <body style="FONT-SIZE: 9pt" MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
      <asp:Panel id="Panel1" runat="server">
        <asp:Label id="label1" Runat="server"></asp:Label>
        <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" CellPadding="4"
        BackColor="White" BorderWidth="1px" BorderStyle="None" BorderColor="#CC9966">
          <ItemStyle ForeColor="#330099" BackColor="White" Font-Size="9pt"></ItemStyle>
          <HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000" Font-Size="9pt"></HeaderStyle>
          <Columns>
            <asp:BoundColumn DataField="Title"></asp:BoundColumn>
            <asp:BoundColumn DataField="CreateDate"></asp:BoundColumn>
          </Columns>
        </asp:DataGrid>
      </asp:Panel>
    </form>
  </body>
</HTML>

GetCurrentClickRow.aspx.vb

Imports System
Imports System.Data
Imports System.Data.OleDb

Public Class GetCurrentClickRow
  Inherits System.Web.UI.Page
  Protected WithEvents Panel1 As System.Web.UI.WebControls.Panel
  Protected WithEvents label1 As System.Web.UI.WebControls.Label
  Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid

#Region " Web Form Designer Generated Code "
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
  End Sub

  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) _
   Handles MyBase.Init
    InitializeComponent()
  End Sub

#End Region

  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
   Handles MyBase.Load
    label1.Text = "获得所点击行的例子"
    label1.Font.Bold = True
    Panel1.HorizontalAlign = HorizontalAlign.Center
    DataGrid1.Columns(0).HeaderText = "文章标题"
    DataGrid1.Columns(1).HeaderText = "发布时间"
    DataGrid1.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
    DataGrid1.AlternatingItemStyle.BackColor = System.Drawing.Color.Ivory
    DataGrid1.HorizontalAlign = HorizontalAlign.Center
    Dim cnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
     + Server.MapPath("Test.mdb")
    Dim cn As New OleDbConnection(cnString)
    cn.Open()
    Dim strSQL As String = "SELECT TOP 10 Title,CreateDate FROM Document ORDER BY CreateDate DESC"
    Dim cmd As New OleDbCommand(strSQL, cn)
    DataGrid1.DataSource = cmd.ExecuteReader
    DataGrid1.DataBind()
    cn.Close()
    cn.Dispose()
    cn = Nothing
  End Sub

  Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, _
 ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
    If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
      e.Item.Attributes.Add("onclick", "this.style.backgroundColor='#FFCC66';alert('您点击的是:\n\n第" _
 + e.Item.ItemIndex.ToString() + "行\n\n文章标题是:" + e.Item.Cells(0).Text.Replace(",", "\'") + "')")
      e.Item.Cells(1).Text = Format(System.Convert.ToDateTime(e.Item.Cells(1).Text.ToString()), "yyyy年M月d日")
      If e.Item.Cells(0).Text.Length > 30 Then
        e.Item.Attributes.Add("Title", e.Item.Cells(0).Text)
        e.Item.Cells(0).Text = e.Item.Cells(0).Text.Substring(0, 28) + "…"
      End If
    End If
  End Sub

End Class

 

#2


如果点击空白处可以触发事件,那就可以实现,在事件里调用itemcommand

#3


Datagrid提供了一种内置的选择按钮,当点此按钮时选中当前行(可以设置SelectedItemStyle属性以使当前行有不同的外观)。但用户可能更习惯于点任意一个位置都能选中一行,如果完全自己实现这个功能相当烦琐。一个好的思路是添加一个选择按钮,但使此列隐藏,当点任一行时调用此按钮产生的Javascript脚本。 

Sub Item_Bound(ByVal sender As Object, 
ByVal e As DataGridItemEventArgs )
      Dim itemType As ListItemType
     itemType = CType(e.Item.ItemType, ListItemType)
     If (itemType <> ListItemType.Header) And _
      (itemType <> ListItemType.Footer) And _
      (itemType <> ListItemType.Separator) Then
      Dim oSelect As LinkButton = CType(e.Item.Cells(5).
Controls(0), LinkButton)
     e.Item.Attributes("onclick") = Page.
 GetPostBackClientHyperlink (oSelect, "")
End Sub
 


这里假设选择按钮位于第6列。e.Item代表了一行,从生成的HTML上看就是在每个<tr>里增加了一个onclick事件。Page.GetPostBackClientHyperLink方法返回页面中LinkButton控件产生的客户端脚本,其中第一个参数是Linkbutton控件,第二个参数是传递给此控件的参数,通常为空。如果不是LinkButton控件,有一个类似的函数GetPostBackClientEvent,读者可以参考MSDN。 

#4


www.dotnetbips.com/displayarticle.aspx?id=205

#5


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchTopQuestionsAboutASPNETDataGridServerControl.asp

#1


你看看这个会不会有点帮助?

如何得到DataGrid中点击的当前行? 
作者:孟宪会 出自:【孟宪会之精彩世界】 发布日期:2003年6月18日 7点44分20秒
--------------------------------------------------------------------------------
 
下面的代码实现了如何得到点击的当前行的数据

GetCurrentClickRow.aspx

<%@ Page Language="vb" EnableViewState="False" AutoEventWireup="false" 
 Codebehind="GetCurrentClickRow.aspx.vb" Inherits="aspxWeb.mengxianhui.com.GetCurrentClickRow"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title>GetCurrentClickRow</title>
    <meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">
    <meta content="Visual Basic 7.0" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
  </HEAD>
  <body style="FONT-SIZE: 9pt" MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
      <asp:Panel id="Panel1" runat="server">
        <asp:Label id="label1" Runat="server"></asp:Label>
        <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" CellPadding="4"
        BackColor="White" BorderWidth="1px" BorderStyle="None" BorderColor="#CC9966">
          <ItemStyle ForeColor="#330099" BackColor="White" Font-Size="9pt"></ItemStyle>
          <HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000" Font-Size="9pt"></HeaderStyle>
          <Columns>
            <asp:BoundColumn DataField="Title"></asp:BoundColumn>
            <asp:BoundColumn DataField="CreateDate"></asp:BoundColumn>
          </Columns>
        </asp:DataGrid>
      </asp:Panel>
    </form>
  </body>
</HTML>

GetCurrentClickRow.aspx.vb

Imports System
Imports System.Data
Imports System.Data.OleDb

Public Class GetCurrentClickRow
  Inherits System.Web.UI.Page
  Protected WithEvents Panel1 As System.Web.UI.WebControls.Panel
  Protected WithEvents label1 As System.Web.UI.WebControls.Label
  Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid

#Region " Web Form Designer Generated Code "
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
  End Sub

  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) _
   Handles MyBase.Init
    InitializeComponent()
  End Sub

#End Region

  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
   Handles MyBase.Load
    label1.Text = "获得所点击行的例子"
    label1.Font.Bold = True
    Panel1.HorizontalAlign = HorizontalAlign.Center
    DataGrid1.Columns(0).HeaderText = "文章标题"
    DataGrid1.Columns(1).HeaderText = "发布时间"
    DataGrid1.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
    DataGrid1.AlternatingItemStyle.BackColor = System.Drawing.Color.Ivory
    DataGrid1.HorizontalAlign = HorizontalAlign.Center
    Dim cnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
     + Server.MapPath("Test.mdb")
    Dim cn As New OleDbConnection(cnString)
    cn.Open()
    Dim strSQL As String = "SELECT TOP 10 Title,CreateDate FROM Document ORDER BY CreateDate DESC"
    Dim cmd As New OleDbCommand(strSQL, cn)
    DataGrid1.DataSource = cmd.ExecuteReader
    DataGrid1.DataBind()
    cn.Close()
    cn.Dispose()
    cn = Nothing
  End Sub

  Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, _
 ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
    If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
      e.Item.Attributes.Add("onclick", "this.style.backgroundColor='#FFCC66';alert('您点击的是:\n\n第" _
 + e.Item.ItemIndex.ToString() + "行\n\n文章标题是:" + e.Item.Cells(0).Text.Replace(",", "\'") + "')")
      e.Item.Cells(1).Text = Format(System.Convert.ToDateTime(e.Item.Cells(1).Text.ToString()), "yyyy年M月d日")
      If e.Item.Cells(0).Text.Length > 30 Then
        e.Item.Attributes.Add("Title", e.Item.Cells(0).Text)
        e.Item.Cells(0).Text = e.Item.Cells(0).Text.Substring(0, 28) + "…"
      End If
    End If
  End Sub

End Class

 

#2


如果点击空白处可以触发事件,那就可以实现,在事件里调用itemcommand

#3


Datagrid提供了一种内置的选择按钮,当点此按钮时选中当前行(可以设置SelectedItemStyle属性以使当前行有不同的外观)。但用户可能更习惯于点任意一个位置都能选中一行,如果完全自己实现这个功能相当烦琐。一个好的思路是添加一个选择按钮,但使此列隐藏,当点任一行时调用此按钮产生的Javascript脚本。 

Sub Item_Bound(ByVal sender As Object, 
ByVal e As DataGridItemEventArgs )
      Dim itemType As ListItemType
     itemType = CType(e.Item.ItemType, ListItemType)
     If (itemType <> ListItemType.Header) And _
      (itemType <> ListItemType.Footer) And _
      (itemType <> ListItemType.Separator) Then
      Dim oSelect As LinkButton = CType(e.Item.Cells(5).
Controls(0), LinkButton)
     e.Item.Attributes("onclick") = Page.
 GetPostBackClientHyperlink (oSelect, "")
End Sub
 


这里假设选择按钮位于第6列。e.Item代表了一行,从生成的HTML上看就是在每个<tr>里增加了一个onclick事件。Page.GetPostBackClientHyperLink方法返回页面中LinkButton控件产生的客户端脚本,其中第一个参数是Linkbutton控件,第二个参数是传递给此控件的参数,通常为空。如果不是LinkButton控件,有一个类似的函数GetPostBackClientEvent,读者可以参考MSDN。 

#4


www.dotnetbips.com/displayarticle.aspx?id=205

#5


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchTopQuestionsAboutASPNETDataGridServerControl.asp