我是这样想的,你先把DropDownList的初始值得到(这儿我没明白你是怎么个显示其值为对应的字符串的方法),然后再
((DropDownList)e.Item.FindControl("DropDownList1")).SelectedIndex=你刚才得到的值;
不知道这样行不行。

解决方案 »

  1.   

    把你定义EditItemTemplate的那块程序贴出来,我帮你改
      

  2.   

    <asp:TemplateColumn HeaderText="输入方式">
    <ItemTemplate>
    <asp:Label id=lblValueType runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ValueTypeName") %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:DropDownList id=listValueType runat="server" CssClass="td" DataValueField='<%# DataBinder.Eval(Container.DataItem, "ValueType") %>'>
    <asp:ListItem Value="0">普通文本</asp:ListItem>
    <asp:ListItem Value="1">整数</asp:ListItem>
    <asp:ListItem Value="2">小数</asp:ListItem>
    <asp:ListItem Value="9">选择框</asp:ListItem>
    </asp:DropDownList>
    </EditItemTemplate>
    </asp:TemplateColumn>
    c#是通过一个DataTable再增加了一列ValueTypeName来实现的,感觉很不对,因为如果要修改对应的内容名称的话我要两个地方都要改,但我不知道该怎么写才能比较好。
      

  3.   

    to: dub(dub) 
    ((DropDownList)e.Item.FindControl("DropDownList1")).SelectedIndex必须对应的是索引号,而我从数据库里得到的是值。除非再加个循环判断,但这就不是数据绑定的做法了,而且在asp.net里不好实现。
      

  4.   

    ddl_Language.SelectedIndex=-1;
    ddl_Language.Items.FindByValue(value).Selected=true;
    这个方法行不行??
      

  5.   

    在编辑事件中
    1.先找到LABEL,得到它的值
    2.然后找到DROPDOWNLIST,绑定它
    3.让它的默认值为LABEL的值这样的帖子很多呀,你在搜索一下。
      

  6.   

    ((DropDownList)e.FindControl("DropDownList1")).Items.FindByValue("你要的值").Selected=true;我的就是这样做的,不知道你的程序是不是也能这样实现。
      

  7.   

    DropDownList DropDownList1=(DropDownList)e.Item.FindControl("listValueType");
    DropDownList1.Selectindex=DropDownList1.items.indexof(DropDownList1.items.findbyvalue((Label)e.Item.FindControl("lblValueType").text.tostring()));
      

  8.   

    to jupiterII():
    错误:
    Object reference not set to an instance of an object.
    private void dgdPf_Edit(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    DropDownList listValueType=(DropDownList)e.Item.FindControl("listValueType");
    Label lblValueType=(Label)e.Item.FindControl("lblValueType");
    listValueType.SelectedIndex=listValueType.Items.IndexOf(listValueType.Items.FindByValue(lblValueType.Text.ToString()));
    dgdPf.EditItemIndex=e.Item.ItemIndex;
    BindData();
    }
    调试发现,listValueType为null,也就是说listValueType控件没找到,lblValueType有内容。我估计是由于在EditCommand时DropDownList还没有初始化。怎么解决呢?
      

  9.   

    但我在编辑命令下找不到下拉列表控件!返回为null
      

  10.   

    private void dgdPf_Edit(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    dgdPf.EditItemIndex=e.Item.ItemIndex;
    BindData();
    DropDownList listValueType=(DropDownList)dgdPf.Items[e.Item.ItemIndex].FindControl("listValueType");
    Label lblValueType=(Label)dgdPf.Items[e.Item.ItemIndex].FindControl("lblValueType");
    listValueType.SelectedIndex=listValueType.Items.IndexOf(listValueType.Items.FindByValue(lblValueType.Text.ToString()));
    }
      

  11.   

    还是null,真奇怪了,同一个模板列里的另外一个控件lblValueType就能找到,为什么这个DropDownList死活找不到?
      

  12.   

    回来看的时候想不到这么多回复了。
    icyer的方法是可行的
      

  13.   

    嘿嘿,有无搞错,一个控件在ItemTemplate中,一个在EditTemplate中,你怎么同时得到这两种状态?<asp:TemplateColumn HeaderText="输入方式">
    <ItemTemplate>
    <asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ValueTypeName") %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:Label id="lblValueType" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ValueTypeName") %>' Visible="False" />
    <asp:DropDownList id="listValueType" runat="server" CssClass="td" DataValueField='<%# DataBinder.Eval(Container.DataItem, "ValueType") %>'>
    <asp:ListItem Value="0">普通文本</asp:ListItem>
    <asp:ListItem Value="1">整数</asp:ListItem>
    <asp:ListItem Value="2">小数</asp:ListItem>
    <asp:ListItem Value="9">选择框</asp:ListItem>
    </asp:DropDownList>
    </EditItemTemplate>
    </asp:TemplateColumn>然后在DataGrid的ItemDataBound事件中加入:
    if (e.Item.ItemType == ListItemType.EditItem)
    {
    DropDownList listValueType=(DropDownList)e.Item.FindControl("listValueType");
    Label lblValueType=(Label)e.Item.FindControl("lblValueType");
    listValueType.SelectedIndex=listValueType.Items.IndexOf(listValueType.Items.FindByValue(lblValueType.Text.ToString()));
    }
      

  14.   

    等等,先不要崇拜。我宣布一切都是我的错:
    我忘了在listValueType里加上runat=server。
    我怎么总犯低级错误啊!!一定要改。
    谢谢大家的热情帮助!