收录日期:2020/10/31 22:01:51 时间:2016/07/04 16:42:46 标签:ASP.NET
怎样设定gridview 的EditItemTemplate中dropdownlist的某一项被选定?
  <asp:TemplateField HeaderText="Department">
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Eval("department") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:DropDownList ID="DropDownList2" runat="server" DataSource="<%# ddlDepartmentBind() %>" DataTextField="deptname" DataValueField="deptname" >
                        </asp:DropDownList>
                    </EditItemTemplate>
直接这样,每次点编辑的时候默认选定项都为第一项,如何才能重新设定它对应的默认选定项啊?
你是说类似这样?
<asp:DropDownList SelectedValue='<%# Bind("departmentId") %>' ... >
是啊。
RowBound 事件中

if(e.Row.RowState == DataControlRowState.Edit){
DropDownList drp = e.Row.FindControl("DropDownList2");
// 
drp.SelectedValue = DataBinder.Eval(e.Row.DataItem, "department").ToString();
}
 <asp:TemplateField HeaderText="Department"> 
    <ItemTemplate> 
        <asp:Label ID="Label2" runat="server" Text=' <%# Eval("department") %>'> </asp:Label> 
    </ItemTemplate> 
    <EditItemTemplate> 
        <asp:DropDownList ID="DropDownList2" runat="server" DataSource=" <%# ddlDepartmentBind() %>" DataTextField="deptname" DataValueField="deptname" SelectedValue='<%# Bind("deptname") %>'
        </asp:DropDownList> 
    </EditItemTemplate> 
</asp:TemplateField>
引用 3 楼 Jinglecat 的回复:
RowBound 事件中 

if(e.Row.RowState == DataControlRowState.Edit){ 
DropDownList drp = e.Row.FindControl("DropDownList2"); 
// 
drp.SelectedValue = DataBinder.Eval(e.Row.DataItem, "department").ToString(); 


为什么偶数行记录不行啊?
SelectedValue=' <%# Bind("deptname") %>'
DropDownList1.Items.FindByText(你要选中的值).selected=true
DropDownList1.Items.FindByvalue(你要选中的值).selected=true
上面各位说的都行,我这个也行,就看个人的习惯
rowdataBound 事件中 

if(e.Row.RowState == DataControlRowState.Edit){ 
DropDownList drp = e.Row.FindControl("DropDownList2"); 
// 
drp.SelectedValue = DataBinder.Eval(e.Row.DataItem, "department").ToString(); 

为什么,偶数行记录就无效啊,默认选定项仍然为第一项目.?????????????????
好奇怪哦!
真的很奇怪哦!
引用 4 楼 amandag 的回复:
<asp:TemplateField HeaderText="Department"> 
    <ItemTemplate> 
        <asp:Label ID="Label2" runat="server" Text=' <%# Eval("department") %>'> </asp:Label> 
    </ItemTemplate> 
    <EditItemTemplate> 
        <asp:DropDownList ID="DropDownList2" runat="server" DataSource=" <%# ddlDepartmentBind() %>" DataTextField="deptname" DataValueField="deptname" SelectedValue=' <%# Bind("deptname")…
有人在吗? 问题出在哪里啊?
rowdataBound 事件中 
加上这句
drp.SelectedValue = ((Label)e.Row.FindControl("Label2")).Text;
引用 13 楼 yangpeiyu 的回复:
rowdataBound 事件中 
加上这句 
drp.SelectedValue = ((Label)e.Row.FindControl("Label2")).Text;


这样当然会报错哦。 DataControlRowState为 edit
rowdatabound 难道只对偶数行记录有效吗?
rowdatabound 难道只对奇数行记录有效吗?


GridView1_RowDataBound:
if (((DropDownList)e.Row.FindControl("DDLXueli")) != null)
        {
            DropDownList ddlxueli = (DropDownList)e.Row.FindControl("DDLXueli");

            //  生成 DropDownList 的值,绑定数据
            string connStr = System.Configuration.ConfigurationSettings.AppSettings["lj"];
            string SqlStr = "SELECT * from xueli";
            DataSet ds = new DataSet();

            SqlConnection conn = new SqlConnection(connStr);
            if (conn.State.ToString() == "Closed") conn.Open();
            SqlDataAdapter da = new SqlDataAdapter(SqlStr, conn);
            da.Fill(ds, "xueli");
            if (conn.State.ToString() == "Open") conn.Close();

            ddlxueli.DataSource = ds.Tables[0].DefaultView;
            ddlxueli.DataTextField = "description";
            ddlxueli.DataValueField = "code";
            ddlxueli.DataBind();
            //

            //  选中 DropDownList
            ddlxueli.SelectedValue = ((HiddenField)e.Row.FindControl("HDFXueli")).Value;
            //
        }

页面:
<asp:TemplateField HeaderText="学历">
                                    <ItemTemplate>
                                        <%# Eval("description")%>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <asp:HiddenField ID="HDFXueli" runat="server" Value='<%# Eval("xueli") %>' />
                                        <asp:DropDownList ID="DDLXueli" runat="server" Width="90px" />
                                    </EditItemTemplate>
                                    <ItemStyle Width="100px" />
                                </asp:TemplateField>


我顶它个肺 ,为什么
 SelectedValue='<%# Bind("department") %>'> 这样就可以完全实现。

而,在rowdatabound中
  if(e.Row.RowState == DataControlRowState.Edit)

DropDownList drp = e.Row.FindControl("DropDownList2"); 
// 
drp.SelectedValue = DataBinder.Eval(e.Row.DataItem, "department").ToString(); 

这样写就不行呢。rowdatabound事件只能对 奇数行记录有效吗? ??
在rowdatabound 中怎么不行啊?
这么没有毅力啊,居然结贴了,不知解决了没有,我的解决方案:不设selectedvalue值,
在DropDownList的第一个位置上添加要作为selectedvalue的值就可以实现你的功能了
c#代码:
if ((e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)
        {
            DropDownList ddl = (DropDownList)e.Row.FindControl("ddlzc");
            //ddl.SelectedValue = DataBinder.Eval(e.Row.DataItem, "zname").ToString();
            string temp = DataBinder.Eval(e.Row.DataItem, "zname").ToString(); 
            string sqlText = "select * from zhicheng";
            OleDbConnection conn = getCon();
            OleDbDataAdapter da = new OleDbDataAdapter(sqlText, conn);
            DataSet ds = new DataSet();
            conn.Open();
            da.Fill(ds, "zhicheng");
            //在0位置添加想要的值
            ds.Tables[0].Rows.Add(new object[] { 0, temp });
            DataView dv = ds.Tables[0].DefaultView;
            //ViewState["docstr"] = ds.Tables[0].Rows[0]["dname"].ToString();        
            dv.Sort = "zid";
            ddl.DataSource = dv;
            ddl.DataValueField = "zid";
            ddl.DataTextField = "zname";
            ddl.DataBind();            
            conn.Close();
            conn.Dispose();
        }
偶数行的问题是因为
if(e.Row.RowState == DataControlRowState.Edit)
这个判断有问题,e.Row.RowState 是DataControlRowState 值的按位组合,偶数行的状态是:DataControlRowState.Edit|DataControlRowState.Alternate
改成下面这个表达式来判断就可以了
if ((e.Row.RowState & DataControlRowState.Edit) > 0)

高手们:怎样不卷纸连续打印吗???!!!加急,在线等候~~~~~~~` 怎样用API来获取一个给定实例的主线程 我在HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI下看到一个字串 请推荐一些VC和Oracle的书,谢谢 怎么在工具栏中加入编辑栏和按钮,并该如何响应其消息? IIS访问的权限问题!在线等待... ?求救,怎么样使用excel.application呀! 高程通过,也散分 大家来看看是什么错误 怎样把CBitmap对象转化成HBITMAP,在线等待 请问如何将内容转换成图片的格式输出!sos! 怎么用jbuilder为一个RMI类生成代码存根?答对马上给分! 有没有办法提供对基本类型的引用? 用WM_COPYDATA的问题,等待高手指点 有关DSP的几个问题 !!急急!!!!!!如何在IE中截获其双击事件并得到其要超连接的地址!!!!!!! BCB高手请进!!!!!!!!! 请问怎样可以让自己喜欢的MM记住自己一辈子(请随意BT) 有谁知道在Windows下如何直接访问硬盘扇区啊 你在他乡还好吗?上海的日子好过吗? 我自己创建MDI,但总是出错误,请各位赐教 我想让一个程序在机器启动的时候自己执行 请问如何在Windows下直接访问硬盘扇区啊 请教:dll制作简单问题,Mfc扩展dll中如何输出一个类的成员函数? 请问谁有友情强档(含有注册码的) 处理回车的问题 十万火急:SQL server7.0为什么不能建新数据库呀, 又一个问题,关于构造函数 请问哪里有pb7-d盘的下载 急!!如何动态生成窗体?Form wizard是如何实现的?