Gridview OnSelectedIndexChanged="ddlrefresh_SelectedIndexChanged"> 在线,急

rjzou2006 2009-09-01 12:27:13
 
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();

}
}

public void bind()
{
string sqlStr = "select * from Employee";
DataSet myds = Common.dataSet(sqlStr);
GridView1.DataSource = myds;
GridView1.DataKeyNames = new string[] { "ID" };
GridView1.DataBind();

AccessDataSource s = new AccessDataSource("E:\\WebSite\\GridViewExamples\\GridViewExamples\\App_Data\\Example.mdb", "select * from Employee");
this.GridView1.DataSourceID = s.ID;
this.GridView1.DataBind();
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddlrefresh = (DropDownList)e.Row.FindControl("ddlRefresh");

//ddlrefresh.NamingContainer
ddlrefresh.AutoPostBack = true;
ddlrefresh.SelectedIndexChanged += new EventHandler(ddlrefresh_SelectedIndexChanged);


}
}

protected void ddlrefresh_SelectedIndexChanged(object sender, EventArgs e)
{
ClientScript.RegisterStartupScript(this.GetType(), "script13", "<script>alert('ddlrefresh_SelectedIndexChanged')</script>");
}



上面这样写dropdownlist 的事件永远不触发?


但是当代码换成



<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="ddlRefresh" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlrefresh_SelectedIndexChanged"> <asp:ListItem Value="1">1</asp:ListItem>
<asp:ListItem Value="2">2</asp:ListItem>
<asp:ListItem Value="3">3</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>



就会执行。


这是为什么呢?

为什么第一种方法不执行呢?

...全文
128 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
rjzou2006 2009-09-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 samincsharp 的回复:]
  放在外面确实可以,但是最好的方法是把只把事件绑定放在IsPostback外面,如果把Bind都放到外面,你就取不到回传的值,因为每次回来都重新绑定了。
  知道原因后,建议还是只在页面修改吧,这样省去很多事情,.NET会放在外面的,不用自己处理
[/Quote]


应该不是放不放在外面的问题吧



现在已经测试成功了

我实现在方法如下:




protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddlrefresh = (DropDownList)e.Row.FindControl("ddlRefresh");

//ddlrefresh.NamingContainer
ddlrefresh.AutoPostBack = true;
ddlrefresh.SelectedIndexChanged += new EventHandler(ddlrefresh_SelectedIndexChanged);

}
}




将事件代码加入到
RowCeated

就行了。

rjzou2006 2009-09-05
  • 打赏
  • 举报
回复
是否在这种情况下,

bind()

应放在ispostback外,才能正常.


回去试试.
SAMINCsharp 2009-09-05
  • 打赏
  • 举报
回复
放在外面确实可以,但是最好的方法是把只把事件绑定放在IsPostback外面,如果把Bind都放到外面,你就取不到回传的值,因为每次回来都重新绑定了。
知道原因后,建议还是只在页面修改吧,这样省去很多事情,.NET会放在外面的,不用自己处理
SAMINCsharp 2009-09-04
  • 打赏
  • 举报
回复
我试了试代码,情况确实如此,原因在于,你的事件绑定是放在 IsPostBack中的,当页面回传时,页面类的实例已经不是第一次生成的了,所以在回传页面的时候,不再去进行事件绑定
SAMINCsharp 2009-09-04
  • 打赏
  • 举报
回复
看一下生成的Html,在页面加和在代码加是不是一样
YL_Show 2009-09-03
  • 打赏
  • 举报
回复
学习
rjzou2006 2009-09-02
  • 打赏
  • 举报
回复

ddlrefresh.AutoPostBack = true;

如果直接在前台点成true而不在后台设置呢?

如果还不行的话设置断点跟踪一下看看



前台设置了,也没有用


断点根本不会执行ddlrefresh_SelectedIndexChanged



rjzou2006 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jianlanzq 的回复:]
ddlrefresh.AutoPostBack = true;

如果直接在前台点成true而不在后台设置呢?

如果还不行的话设置断点跟踪一下看看
[/Quote]


前台设置了,也没有用



断点根本不会执行ddlrefresh_SelectedIndexChanged



  • 打赏
  • 举报
回复
ddlrefresh.AutoPostBack = true;

如果直接在前台点成true而不在后台设置呢?

如果还不行的话设置断点跟踪一下看看
rjzou2006 2009-09-01
  • 打赏
  • 举报
回复
把事件写在页面文件就能执行,但写在代码里面就不能执行?


ch219888 2009-09-01
  • 打赏
  • 举报
回复
DropDownList 一般都是用在模版列之中的
play1982 2009-09-01
  • 打赏
  • 举报
回复
AutoPostBack="true"
End 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jianlanzq 的回复:]
ddlrefresh.AutoPostBack = true;

如果直接在前台点成true而不在后台设置呢?

如果还不行的话设置断点跟踪一下看看
[/Quote]
同样的观点 试试呢
新闻系统 acess+vs <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register Src="custom/bottom.ascx" TagName="bottom" TagPrefix="uc1" %> 新闻主页


               
   
GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="NewsId" Width="600px" OnPageIndexChanging="GridView1_PageIndexChanging" > GridView>
SelectedIndexChanged="DropDownList1_SelectedIndexChanged">

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧