protected void gv_Topic_RowDataBound(object sender, GridViewRowEventArgs e)
 { 
   if (e.Row.RowState == DataControlRowState.Edit)
            {
                DropDownList ddl_Template = (DropDownList)(e.Row.Cells[1].FindControl("ddl_Template"));
                ddl_Template.DataSource = Control.TopicList.GetTopicTemplate();//获得数据源
                ddl_Template.DataTextField = "Name";
                ddl_Template.DataValueField = "ID";
                ddl_Template.DataBind();
                ddl_Template.Items.Insert(0, new ListItem("无", "null"));
                ddl_Template.SelectedIndex = 3;                DropDownList ddl_Style = (DropDownList)(e.Row.Cells[2].FindControl("ddl_Style"));
                ddl_Style.DataSource = Control.TopicList.GetStyle();//获得数据源
                ddl_Style.DataTextField = "Name";
                ddl_Style.DataValueField = "CssstyleId";
                ddl_Style.DataBind();
                ddl_Style.Items.Insert(0, new ListItem("无", "null"));
            }
}这是为了给GridView的模板列中的DropDownList控件赋值,但是问什么我的程序只有点击GridView中的第一行的"编辑"时,e.Row.RowState的值才是edit,点击其他行是状态都是normal也就是只有点击第一行的"编辑"时才执行这段代码,点击其他行的"编辑"时就不执行,高手帮忙解释一下,在线等~~

解决方案 »

  1.   

    因为你DropDownList 控件没有找对,
    FindControl("ddl_Template")这句话找的始终是第一个DropDownList ,把他改为
    ddl_Template.ClientID试试
      

  2.   

    编辑  是如何绑定在模版列里面的???
    应该是这里出了问题 !!
     protected void gv_Topic_RowDataBound(object sender, GridViewRowEventArgs e) 
     {  
       if (e.Row.RowState == DataControlRowState.Edit) 
                { 
        这里先弄个输出还是附值..看看 !有数据?
                } 

      

  3.   

    protected void gv_Topic_RowDataBound(object sender, GridViewRowEventArgs e) 
     {  
       if (e.Row.RowState == DataControlRowState.Edit) 
                { 
                    DropDownList ddl_Template = (DropDownList)(e.Row.Cells[1].FindControl("ddl_Template")); 
                    ddl_Template.DataSource = Control.TopicList.GetTopicTemplate();//获得数据源 
                    ddl_Template.DataTextField = "Name"; 
                    ddl_Template.DataValueField = "ID"; 
                    ddl_Template.DataBind(); 
                    ddl_Template.Items.Insert(0, new ListItem("无", "null")); 
                    ddl_Template.SelectedIndex = 3;                 DropDownList ddl_Style = (DropDownList)(e.Row.Cells[2].FindControl("ddl_Style")); 
                    ddl_Style.DataSource = Control.TopicList.GetStyle();//获得数据源 
                    ddl_Style.DataTextField = "Name"; 
                    ddl_Style.DataValueField = "CssstyleId"; 
                    ddl_Style.DataBind(); 
                    ddl_Style.Items.Insert(0, new ListItem("无", "null")); 
                } 
    } 把ddl_Template表与原对象重名试试
      

  4.   

    我找到问题了,交替项的编辑状态时的State为Alternate | Edit.要在if(...)里面再加个条件,谢谢你们了。
      

  5.   

                if (e.Row.RowState == DataControlRowState.Edit || e.Row.RowState == (DataControlRowState.Alternate | DataControlRowState.Edit))//&& e.Row.RowType == DataControlRowType.DataRow
                {
                    DropDownList ddl_Template = (DropDownList)(e.Row.Cells[1].FindControl("ddl_Template"));
                    ddl_Template.DataSource = Control.TopicList.GetTopicTemplate();
                    ddl_Template.DataTextField = "Name";
                    ddl_Template.DataValueField = "ID";
                    ddl_Template.DataBind();
                    ddl_Template.Items.Insert(0, new ListItem("无", "null"));
                    ddl_Template.SelectedIndex = 3;                DropDownList ddl_Style = (DropDownList)(e.Row.Cells[2].FindControl("ddl_Style"));
                    ddl_Style.DataSource = Control.TopicList.GetStyle();
                    ddl_Style.DataTextField = "Name";
                    ddl_Style.DataValueField = "CssstyleId";
                    ddl_Style.DataBind();
                    ddl_Style.Items.Insert(0, new ListItem("无", "null"));
                }
    这样就OK了,:D