用这个方法能得到DroopDownList中改过的值:
for (int i=0; i<DataGrid1.Items.Count; i++) 
{
    
DataGridItem _item = DataGrid1.Items[i];
DropDownList title=(DropDownList)_item.FindControl("DropDownList名称");
         得到选择的值
         title.SelectedItem.Tostring();
}

解决方案 »

  1.   

    <ItemTemplate>
    <asp:DropDownList Runat=server ID=aa DataSource=<%#DataBinder.Eval(Container.DataItem,"Product_Money"))%>'></asp:DropDownList>

    </ItemTemplate>
      

  2.   

    错了是
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:DropDownList Runat=server ID="aa" DataSource='<%#DataBinder.Eval(Container.DataItem,"Product_Money"))%>'>
    </asp:DropDownList>
    </ItemTemplate>
    </asp:TemplateColumn>
      

  3.   

    谢谢liuzhonghe(呆头鹅),你的这种方法我试过不行的输出如下错误信息:
    “DropDownList1 使用的是无效数据源。有效数据源必须实现 IListSource 或 IEnumerable。”
      

  4.   

    在private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)//datagrid itemcommand 事件中
    {
       string text=((DropDownList)e.Item.Cells[模版列的列数].Controls[0]).SelectedItem.Text;
    .................
    }
      

  5.   

    在datagrid的ItemDataBound事件中用dropdownlist相关的那个字段的值来确定这一行的dropdownlist选择的item是哪一个:
    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
    DropDownList myList = (DropDownList)e.Item.FindControl("dropdownlistid");   //获取DropDownList对象
    string str = ((DataRowView)e.Item.DataItem)["fieldname"].ToString();    //获取这一行DropDownList对应的那个字段的值
    myList.Items.FindByValue(str).Selected;   //将这个对应的那个Item设为Selected
    }
    }用遍历datagrid中的每一行来获取每一行的DropDownList:
    foreach(DataGridItem myItem in DataGrid1.Items)
    {
    DropDownList myList = (DropDownList)myItem.Cells[n].Controls[0];   //n为你的DropDownList所在的列序号
    }
      

  6.   

    DropDownList的ListItem项根据数据库中的值而变化显示
    是指绑定的时候就根据表中其它字段显示吗?如果那样的话你得在DataGrid的ItemCreated事件中做一些处理,下面是一个例子:根据dgDctors数据表中显示的dr_id字段动态显示医生对应的专长    Private Sub dgDoctors_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgDoctors.ItemCreated
            Dim datrowv As DataRowView
            datrowv = e.Item.DataItem
            If IsNothing(datrowv) Then
                Return
            Else
                '获取医生id号
                Dim drid As String
                drid = datrowv("dr_id")            Dim lit As ListItemType
                lit = e.Item.ItemType
                If lit = ListItemType.Item Or lit = ListItemType.AlternatingItem Then
                    Dim speList As New DropDownList()
                    speList.ID = "drSp"
                    Dim sqlSp As String
                    sqlSp = "select * from drspecialties where dr_id='" & drid & "'"
                    Dim daSp As New SqlClient.SqlDataAdapter(sqlSp, conn)
                    Dim dsSp As New DataSet()
                    daSp.Fill(dsSp)
                    speList.DataSource = dsSp
                    speList.DataTextField = "specialty_id"
                    speList.DataBind()
                    Dim cell As TableCell
                    e.Item.Cells(0).Controls.Add(speList)
                End If
            End If
        End Sub
      

  7.   

    我的意思是:在DataGrid的ItemTemplate中放一个DropDownList,DropDownList中固定有三个ListItem(如:A、B、C),DropDownList的ListItem项根据数据库中的值与ListItem的Value值相对应而变化显示!
      

  8.   

    你的dataGrid没有绑定数据源,或者数据源中没有Product_Money字段,你改一下这个字段
      

  9.   

    上边的前提是DataGrid控件的模板列中为空,DropDownList是通过上述代码添加进去的
      

  10.   

    准确的说是这样:
    在DataGrid的ItemTemplate中放一个DropDownList,DropDownList中应有三个ListItem(如:A、B、C,A、B、C是ListItem的Text值,而ListItem的Value值与数据库中的字段邦定,可能是0、1或2),DropDownList的ListItem项根据数据库中的值与ListItem的Value值相对应而变化显示,当然在ItemTemplate中应可以更改选择ListItem项!
      

  11.   

    alf(小丁) 你可不可以仔细看我的答复?
      

  12.   

    chnking(kent)对不起,我刚想谢你,我已经根据你的提示解决了这个问题。
    小弟在这谢了!一会儿就给分!
      

  13.   

    你的电子邮件,我把源码发给你,里面有好多关于DATAGRID的高级用法