GridView中可否实现单击一行等效于触发SelectButton事件
在GridView中添加<asp:CommandField ShowSelectButton="True" />,点击选择按钮可选择一行。此时,GridView.SelectedRow.RowIndex等于对应选中的行。
我想通过单击行来实现这一效果,而不添加SelectButton。这样我就可以通过GridView.SelectedRow.RowIndex来获取我要的那一行数据。
请问如何实现?谢谢!
我看页面生成的javascript,在后台中添加如下代码,可实现,不过似乎不好,要将页面设置为 enableEventValidation="false" :
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("style", "cursor:hand;");
e.Row.Attributes.Add("onclick", string.Format("__doPostBack('GridView', 'Select${0}');", e.Row.DataItemIndex));
}
}
问题点数:100、回复次数:12Top
1 楼yefeihaha(学习)回复于 2006-07-18 19:18:35 得分 3
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
应该放在这里面Top
2 楼sandsboy(竹子)回复于 2006-07-18 19:44:32 得分 5
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onclick", "highlight(this);");
}
}
function highlight(o){
e = o;
o = o.parentElement;
while(o!=null && o.tagName != "TABLE"){
o = o.parentElement;
}
for(var i =0;i<o.rows.length;i++){
o.rows[i].style.backgroundColor = "white";
}
e.style.backgroundColor = "red";
}Top
3 楼coolstone007(coolstone007)回复于 2006-07-19 13:12:23 得分 0
我是想和CommandField无关,又达到CommandField的效果。利用单击某一数据行,而不是单击CommandField。Top
4 楼antiking(生活就象拉大便有时顺畅有时不顺畅.)回复于 2006-07-19 13:54:55 得分 2
e.Row.Attributes.Add("onclick", "this.style.backgroundColor='Red'") ;Top
5 楼guodawu($)回复于 2006-07-19 14:11:44 得分 2
学习,学习Top
6 楼flyin2006(败家子__不再误人子弟)回复于 2006-07-19 14:29:52 得分 2
用服务器代码不可能 用脚本Top
7 楼net_lover(【孟子E章】)回复于 2006-07-19 14:51:02 得分 80
<%@ Page language="C#" enableEventValidation="false"%>
<script runat="server">
void CustomersGridView_SelectedIndexChanged(Object sender, EventArgs e)
{
GridViewRow row = CustomersGridView.SelectedRow;
Message.Text = "You selected " + row.Cells[2].Text + ".";
}
protected void CustomersGridView_RowDataBound( object sender, GridViewRowEventArgs e )
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[0].Attributes.Add("style", "display:none");
e.Row.Attributes.Add("onclick", "this.cells[0].childNodes[0].click()");
}
}
</script>
<html>
<body>
<form id="Form1" runat="server">
<asp:gridview id="CustomersGridView"
datasourceid="CustomersSource"
allowpaging="True"
selectedindex="0"
onselectedindexchanged="CustomersGridView_SelectedIndexChanged"
runat="server" OnRowDataBound="CustomersGridView_RowDataBound">
<selectedrowstyle backcolor="LightCyan" forecolor="DarkBlue"
font-bold="True"/>
<Columns>
<asp:CommandField ShowSelectButton="True"/>
</Columns>
</asp:gridview>
<br/>
<asp:label id="Message"
forecolor="Red"
runat="server"/>
<asp:sqldatasource id="CustomersSource"
selectcommand="SELECT [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] FROM [Customers]"
connectionstring="<%$ ConnectionStrings:NorthwindConnectionString %>"
runat="server"/>
</form>
</body>
</html>
Top
8 楼net_lover(【孟子E章】)回复于 2006-07-19 14:58:19 得分 0
sqldatasource 可以换成其它的试验Top
9 楼asuntir123()回复于 2006-07-19 15:09:05 得分 6
一下代码只是供你参考:
private void grdData2_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType==ListItemType.EditItem)
{
e.Item.Attributes.Add("onmouseover", "javascript: TRBackColor = this.style.backgroundColor; this.style.backgroundColor = TRMoveColor;");
e.Item.Attributes.Add("onmouseout", "javascript: this.style.backgroundColor = TRBackColor;");
e.Item.Style.Add("cursor", "mouse");
e.Item.Attributes.Add
("onclick", "javascript: 某个javascript函数();");
}
}Top
10 楼net_lover(【孟子E章】)回复于 2006-07-19 15:12:58 得分 0
<%@ Page language="C#" enableEventValidation="false"%>
<script runat="server">
void CustomersGridView_SelectedIndexChanged( Object sender, EventArgs e )
{
GridViewRow row = CustomersGridView.SelectedRow;
Message.Text = "您选择的是:" + row.Cells[2].Text + ".";
}
protected void CustomersGridView_RowDataBound( object sender, GridViewRowEventArgs e )
{
e.Row.Cells[0].Attributes.Add("style", "display:none");
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onclick", "this.cells[0].childNodes[0].click()");
}
}
protected void Page_Load( object sender, EventArgs e )
{
CustomersGridView.HeaderRow.Cells[0].Attributes.Add("style", "display:none");
CustomersGridView.FooterRow.Cells[0].Attributes.Add("style", "display:none");
}
</script>
<html>
<body>
<form id="Form1" runat="server">
<asp:GridView ID="CustomersGridView" DataSourceID="CustomersSource" AllowPaging="True"
SelectedIndex="0" OnSelectedIndexChanged="CustomersGridView_SelectedIndexChanged"
runat="server" OnRowDataBound="CustomersGridView_RowDataBound">
<SelectedRowStyle BackColor="LightCyan" ForeColor="DarkBlue" Font-Bold="True" />
<Columns>
<asp:CommandField ShowSelectButton="True" />
</Columns>
</asp:GridView>
<br />
<asp:Label ID="Message" ForeColor="Red" runat="server" />
<asp:SqlDataSource ID="CustomersSource" SelectCommand="SELECT [CustomerID], [CompanyName], [Address] FROM [Customers]"
ConnectionString="Server=(local);Database=Northwind;Trusted_Connection=True;" runat="server" />
</form>
</body>
</html>
Top
11 楼coolstone007(coolstone007)回复于 2006-07-20 13:27:10 得分 0
明白了。关键就是this.cells[0].childNodes[0].click()。
我就是不知道怎么通过客户端脚本触发这个事件。
Top
12 楼coolstone007(coolstone007)回复于 2006-07-20 13:31:48 得分 0
谢谢!Top




