使用模板列,编辑模板,托放一个dropdownlist控件,指定其DataSource属性(数据源),DataMember属性(表),TextField(字段),ValueField(子段)。Page_Load(){
……
DataGrid1.DataBind();
}

解决方案 »

  1.   

    //参考一下<asp:TemplateColumn SortExpression="personationid" HeaderText="职位">
    <ItemTemplate>
    <asp:Label id=Label6 runat="server" Text='<%# getNote(DataBinder.Eval(Container, "DataItem.personationid").ToString()) %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:DropDownList id=DropDownList1 runat="server" DataMember="EDIT_DATAlIST" DataSource="<%# dsEditData1 %>" Width="93px" DataTextField="editData" DataValueField="editValue" SelectedIndex='<%# getSelectedIndex(DataBinder.Eval(Container, "DataItem.personationid").ToString()) %>'>
    </asp:DropDownList>
    </EditItemTemplate>
    </asp:TemplateColumn>==========================================================================
    private void Page_Load(object sender, System.EventArgs e)
    {
    ……
    gridbind();
    }
    ==============================================================================
    private void gridbind()
    {
    dsSecurity1=pso.getDsSecurity();
    try
    {
    DataGrid1.DataBind();
    }
    catch(Exception ee)
    {
    //删除当前页最后一行发生的异常
    if(DataGrid1.CurrentPageIndex>=DataGrid1.PageCount)
    {
    int i=DataGrid1.CurrentPageIndex;
    i--;
    DataGrid1.CurrentPageIndex=i;
    }
    DataGrid1.DataBind();

    }
    dsEditData1=(dsEditData)Session["dsEditData1"];
    ddlPersonation.DataBind(); }
    =======================================================================
    //
    public int getSelectedIndex(string str)
    {
    int idx=0;
    dsEditData1=(dsEditData)Session["dsEditData1"];
    for(int i=0;i<dsEditData1.EDIT_DATAlIST.Rows.Count;i++)
    {
    dsEditData.EDIT_DATAlISTRow editRow=(dsEditData.EDIT_DATAlISTRow)dsEditData1.EDIT_DATAlIST.Rows[i];
    string dataStr=editRow.editValue;
    if(dataStr==str)
    {
    idx=i;
    break;
    }
    }
    return idx;
    }
      

  2.   

    还有别的方法吗?比如用DATAGRID中的属性OnItemDataBound来做。我是用这个做的,但不成功,代码如下:
       Sub dd(ByVal Sender As Object, ByVal e As DataGridItemEventArgs) Handles DataGrid1.ItemDataBound        Dim ddl As DropDownList = DataGrid1.Items(e.Item.ItemIndex).Cells(4).FindControl("ddl3")
            Dim sql As String = "select * from ****"
            hisun.dispdd(sql, ddl, "**", "id")
        End Sub
    运行后的错误如下:
    索引超出范围。必须为非负值并小于集合大小。参数名:index 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名:index源错误: 
    行 193:    Sub dd(ByVal Sender As Object, ByVal e As DataGridItemEventArgs) Handles DataGrid1.ItemDataBound
    行 194:
    行 195:        Dim ddl As DropDownList = DataGrid1.Items(e.Item.ItemIndex).Cells(4).FindControl("ddl3")
    ……………………………………能帮我看看是哪错了吗?谢谢!解决者有分
     
      

  3.   

    看看可不可以:把dropdownlist的数据放到Arraylist,再用之DataBind到datagrid.
      

  4.   

    kinglht(爱新觉罗至尊宝) 的方法我试了,可惜不用,我在html代码中设定dropdownlist的datasource属性后,运行报错,说该属性只能在程序运行时设定,晕。还望各位兄弟指教。。
      

  5.   

    datagrid没有绑定上 ,里面没有数据
      

  6.   

    //参考 我的成功了
    ------------------------------------------
    Private Sub Datagrid1_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles Datagrid1.ItemCreated
            If e.Item.ItemType = ListItemType.Footer Then
                Dim drl As DropDownList = CType(e.Item.Cells(1).FindControl("ddl_gn"), DropDownList)
                Dim my_command As New SqlCommand("select yhxm from dl", my_connection)
                Dim sqlReader As SqlDataReader
                my_connection.Open()
                sqlReader = my_command.ExecuteReader()
                Dim dy As ArrayList
                dy = New ArrayList()
                While sqlReader.Read()
                    dy.Add(sqlReader(0).ToString())
                End While
                drl.DataSource = dy
                drl.DataBind()
                sqlReader.Close()
                my_connection.Close()
            End If
        End Sub
      

  7.   

    pingan99(png_an_99)为什么我像你那样做会出错呢? If e.Item.ItemType = ListItemType.Item.Footer Then
                Dim sql As String = "select * from 123"
                Dim ddl As DropDownList = CType(e.Item.Cells(4).FindControl("ddl3"), DropDownList)
                objcon.Open()
                Dim cmd As New SqlCommand(sql, objcon)
                Dim dr As SqlDataReader
                dr = cmd.ExecuteReader()
                Dim dy As New ArrayList()
                While dr.Read()
                    dy.Add(dr(0).ToString())
                End While
                ddl.DataSource = dy
                ddl.DataBind()
                dr.Close()
                objcon.Close()
            End If
    错误的代码如下:未将对象引用设置到对象的实例。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
    行 215:                dy.Add(dr(0).ToString())
    行 216:            End While
    行 217:            ddl.DataSource = dy
    行 218:            ddl.DataBind()
    行 219:            dr.Close()
     
      

  8.   

    注意这里:
    If e.Item.ItemType = ListItemType.Item.Footer Then
    我的dropdownlist方在页脚
      

  9.   

    pingan99(png_an_99)那我的dropdownlist是在datagrid的cells中的,如何写呢?
      

  10.   

    你先搞明白 ListItemType.Item.Footer 什么意思 
    是编辑列吧!
    改一下 Footer 就可以了 
      

  11.   

    把Footer 换成 Edititem 试试
      

  12.   

    现在好了,不过为什么绑定到DropDownList中的是values值,而不是text呢?