http://community.csdn.net/Expert/topic/3548/3548550.xml?temp=.9443628
当我点击“编辑”后, Dropdownlist2 默认是数据库的第一项,有没有办法点击“编辑”后 Dropdownlist2 的默认项是 id=Label1 的值。++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
》》》》前台 <asp:TemplateColumn HeaderText="类别名">

<ItemTemplate>
<asp:Label id=Label1 runat="server" Text='<%# Container.DataItem("类别名") %>'></asp:Label>
</ItemTemplate>

<EditItemTemplate>
<asp:DropDownList id="Dropdownlist2" runat="server"></asp:DropDownList>
        </EditItemTemplate> </asp:TemplateColumn>=============================================================================
》》》》》》后台。Public Sub myDataGrid_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)        Conn = New SqlConnection(mysqlDB)        Conn.Open()        Dim SQL = "Select * From 新闻类别"
        Adpt = New SqlDataAdapter(SQL, Conn)        Ds = New DataSet
        Adpt.Fill(Ds, "新闻类别")
        If e.Item.ItemType = ListItemType.EditItem Then            Dim tempobj As DropDownList = CType(e.Item.FindControl("Dropdownlist2"), DropDownList)            tempobj.DataSource = Ds.Tables("新闻类别")
            tempobj.DataTextField = Ds.Tables("新闻类别").Columns("类别名").ToString()
            tempobj.DataValueField = Ds.Tables("新闻类别").Columns("编号").ToString()           
            tempobj.DataBind()        End If
        Conn.Close()
    End Sub‘-------------------------------------------------------------------
 Sub EditData(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
        '点击编辑
   
            MyDataGrid.EditItemIndex = e.Item.ItemIndex            OpenDataBase_And_BindToDataGrid()
     
    End Sub

解决方案 »

  1.   

    tempobj.DataBind()string gid = ((Label)e.Item.FindControl("label")).Text;tempobj.Items.FindByValue(gid).Selected = true;
      

  2.   

    你的问题在于,你试图在ItemDataBound里面来获取模板列里面的控件
    这个是不能实现的参考这个帖子http://community.csdn.net/Expert/topic/3462/3462558.xml?temp=9.270877E-02
      

  3.   

    Dropdownlist2.selectedvalue=你的ID
    当然你的下拉的Value的值邦定的是ID
      

  4.   

    你应该这样
    If e.Item.ItemType = ListItemType.EditItem Then            Dim tempobj As DropDownList = CType(e.Item.FindControl("Dropdownlist2"), DropDownList)            tempobj.DataSource = Ds.Tables("新闻类别")
                tempobj.DataTextField = Ds.Tables("新闻类别").Columns("类别名").ToString()
                tempobj.DataValueField = Ds.Tables("新闻类别").Columns("编号").ToString()           
                tempobj.DataBind()//下面是C#语法
     DataRowView drv = (DataRowView)e.Item.DataItem;
    ListItem item = tempobj.Items.FindByText(drv["类别名"].ToString());
    if(item != null)
       item.Selected = true;        End If
      

  5.   

    <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="csdnTest.WebForm1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <FONT face="宋体">
    <asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 224px; POSITION: absolute; TOP: 112px"
    runat="server" AutoGenerateColumns="False" Width="264px">
    <Columns>
    <asp:BoundColumn DataField="ID" HeaderText="ID"></asp:BoundColumn>
    <asp:TemplateColumn HeaderText="xx">
    <ItemTemplate>
    <asp:Label id=Label1 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.name") %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
    </Columns>
    </asp:DataGrid></FONT>
    </form>
    </body>
    </HTML>
      

  6.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.IO;
    using System.Runtime.Serialization;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Runtime.Serialization.Formatters.Soap;
    namespace csdnTest
    {
    /// <summary>
    /// WebForm1 的摘要说明。
    /// </summary>
    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid DataGrid1;

    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!Page.IsPostBack)
    {
    DataTable dt = new DataTable();
    dt.Columns.Add("ID");
    dt.Columns.Add("NAME");
    DataRow dr  = dt.NewRow();
    dr["ID"] = 1;
    dr["NAME"] = "jason";
    dt.Rows.Add(dr);
    this.DataGrid1.DataSource = dt;
    this.DataGrid1.DataBind();
    }
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.DataGrid1.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_EditCommand);
    this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    this.DataGrid1.EditItemIndex = e.Item.ItemIndex;

    DataTable dt = new DataTable();
    dt.Columns.Add("ID");
    dt.Columns.Add("NAME");
    DataRow dr  = dt.NewRow();
    dr["ID"] = 1;
    dr["NAME"] = "jason";
    dt.Rows.Add(dr);
    this.DataGrid1.DataSource = dt;
    this.DataGrid1.DataBind();
    } private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemType == ListItemType.EditItem)
    {
    DropDownList ddl = (DropDownList)e.Item.FindControl("DropDownList1");
    DataTable dt = new DataTable();
    dt.Columns.Add("ID");
    dt.Columns.Add("NAME");
    DataRow dr  = dt.NewRow();
    dr["ID"] = 1;
    dr["NAME"] = "xxx";
    dt.Rows.Add(dr);
    dr  = dt.NewRow();
    dr["ID"] = 1;
    dr["NAME"] = "jason";
    dt.Rows.Add(dr);
    ddl.DataSource = dt;
    ddl.DataTextField = "NAME";
    ddl.DataBind();
    DataRowView drv = (DataRowView)e.Item.DataItem;
    ddl.Items.FindByText(drv["NAME"].ToString()).Selected = true;

    }
    } }
    }
      

  7.   

    TO: cnhgj(戏子) (极度(╭∩╮(︶︿︶)╭∩╮)B4不结贴者)未将对象引用设置到对象的实例。 
      

  8.   

    当然发现不了Label1了,因为当一行处于编辑状态的时候,ItemTempLate里面的模板是不生成的楼主尝试了4楼的方法没有?你直接把5,6楼的代码建立一个aspx来运行运行
    就知道了
      

  9.   

    请问 brightheroes(闭关|那一剑的风情)if(item != null)
       item.Selected = true;        End If
    是什么意思,我不理解,转vb.net怎么写。
      

  10.   

    就是
    if not item is nothing
       item.Selected = true;
      

  11.   

    十分感谢  brightheroes(闭关|那一剑的风情) 
    已经搞定了
      

  12.   

    去我这里看看
    刚写了一个小总结
    http://blog.csdn.net/brightheroes/archive/2004/11/13/180201.aspx