你可以在datagird里面邦定dropdownlist
<itemtemplate>
<asp:dropdownlist>
</itemtemplate>

解决方案 »

  1.   

    <asp:datagrid id="DataGrid1" Runat="server" DataKeyField="ID" AutoGenerateColumns="False" ShowHeader="False">
    <Columns>
    <asp:BoundColumn DataField="id" ReadOnly="True"></asp:BoundColumn>
    <asp:TemplateColumn>
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "Context") %>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:DropDownList id="drop1" Runat="server" AutoPostBack="True" DataValueField="ID" DataTextField="Context"></asp:DropDownList>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="职务">
    <ItemTemplate>
    <%#DataBinder.Eval(Container.DataItem,"ParentID")%>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox id="TextBox1" Runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"ParentID")%>'>
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:TextBox ID="TextBox2" Runat="server" Enabled="False"></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:CheckBox id="CheckBox1" Runat="server" OnCheckedChanged="DataGrid_ChkChange" AutoPostBack="True"></asp:CheckBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:datagrid>
      

  2.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchTopQuestionsAboutASPNETDataGridServerControl.asp
      

  3.   

    http://www.csdn.net/Develop/read_article.asp?id=26590
      

  4.   

    楼主看这个!http://expert.csdn.net/Expert/topic/3036/3036353.xml?temp=.1694605
      

  5.   

    使用editTemplate应该能实现吧?
      

  6.   

    我写了个例子。
    此例子,另外还有两种保存状态的方法。
    以前我贴出过一次。
    这里在贴一次:完整代码如下。
    Html代码。
    <%@ Page language="c#" Codebehind="SaveMoreState.aspx.cs" AutoEventWireup="false" Inherits="StudyDotNet.DataGrid.SaveMoreState" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>SaveMoreState</title>
    <META http-equiv="Content-Type" content="text/html; charset=gb2312">
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
    <center><font color="red"><b>DataGrid 翻页保存与还原状态</b></font></center>
    <form id="Form1" method="post" runat="server">
    <!--/********                 DataGrid1                 ********/--><br>
    <font color="red"><b>翻页可以记录每次的更改操作[用于一次性提交]</b></font>
    <asp:datagrid id="DataGrid1" runat="server" PageSize="3" AllowPaging="True" AutoGenerateColumns="False"
    PagerStyle-Mode="NumericPages" DataKeyField="ID">
    <Columns>
    <asp:BoundColumn DataField="ID" ReadOnly="True" HeaderText="编号"></asp:BoundColumn>
    <asp:BoundColumn DataField="Name" ReadOnly="True" HeaderText="姓名"></asp:BoundColumn>
    <asp:TemplateColumn HeaderText="性别">
    <ItemTemplate>
    <asp:DropDownList id="ddlSex" runat="server">
    <asp:ListItem Value="0">男</asp:ListItem>
    <asp:ListItem Value="1">女</asp:ListItem>
    </asp:DropDownList>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="年龄">
    <ItemTemplate>
    <asp:TextBox ID="txbAge" BorderStyle="Groove" Text='<%# DataBinder.Eval(Container.DataItem, "Age") %>' Runat="server">
    </asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:datagrid>
    <!--/********                 DataGrid1完                 ********/--><br>
    <br>
    <!--/********                 DataGrid2                 ********/-->
    <font color="red"><b>在编辑模式下显示下拉清单</b></font>
    <asp:DataGrid id="DataGrid2" DataKeyField="ID" runat="server" PagerStyle-Mode="NumericPages" AutoGenerateColumns="False"
    AllowPaging="True" PageSize="3">
    <Columns>
    <asp:BoundColumn DataField="ID" ReadOnly="True" HeaderText="编号"></asp:BoundColumn>
    <asp:BoundColumn DataField="Name" ReadOnly="True" HeaderText="姓名"></asp:BoundColumn>
    <asp:TemplateColumn HeaderText="性别">
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "Sex") %>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:DropDownList id="ddlSex2" DataSource ="<%# ddlSex() %>" DataMember="Name" DataTextField="SexName" DataValueField="SexValue" runat="server">
    </asp:DropDownList>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="年龄">
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "Age") %>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox ID="Textbox1" BorderStyle="Groove" Text='<%# DataBinder.Eval(Container.DataItem, "Age") %>' Runat="server">
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:ButtonColumn Text="编辑" ButtonType="PushButton" HeaderText="操作" CommandName="Edit"></asp:ButtonColumn>
    </Columns>
    <PagerStyle Mode="NumericPages"></PagerStyle>
    </asp:DataGrid>
    <!--/********                 DataGrid2完                 ********/--></form>
    </body>
    </HTML>
      

  7.   

    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;namespace StudyDotNet.DataGrid
    {
    /// <summary>
    /// SaveMoreState 的摘要说明。
    /// </summary>
    public class SaveMoreState : System.Web.UI.Page
    {
    #region 控件申明
    protected System.Web.UI.WebControls.DropDownList DropDownList1;
    protected System.Web.UI.WebControls.TextBox txbName;
    protected System.Web.UI.WebControls.Button Button1;
    protected System.Web.UI.WebControls.Button Button2;
    protected System.Web.UI.WebControls.DataGrid DataGrid2;
    protected System.Web.UI.WebControls.DataGrid DataGrid1;
    #endregion 

    #region Page_Load
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(!Page.IsPostBack)
    {
    BindData();
    BindData2();
    }
    } #endregion  #region 数据绑定
    private void BindData()
    {
    DataGrid1.DataSource =CreateDataSource();
    DataGrid1.DataBind();
    } private void BindData2()
    {
    DataGrid2.DataSource =CreateDataSource();
    DataGrid2.DataBind();
    } private DataTable CreateDataSource()
    {
    DataTable dt = new DataTable();
    dt.Columns.Add("ID");
    dt.Columns.Add("Name");
    dt.Columns.Add("Sex");
    dt.Columns.Add("Age");
    dt.Rows.Add(new object[] {"1","顺治","男","45"});
    dt.Rows.Add(new object[] {"2","康熙","男","7"});
    dt.Rows.Add(new object[] {"3","雍正","男","62"});
    dt.Rows.Add(new object[] {"4","乾隆","男","18"});
    dt.Rows.Add(new object[] {"5","朱元璋","男","32"});
    dt.Rows.Add(new object[] {"6","赵框印","男","43"});
    dt.Rows.Add(new object[] {"7","李世民","男","47"});
    dt.Rows.Add(new object[] {"8","武则天","女","22"});
    dt.Rows.Add(new object[] {"9","李旦","男","34"});
    return dt;
    } public DataTable ddlSex()
    {
    DataTable dt = new DataTable();
    dt.Columns.Add("SexName");
    dt.Columns.Add("SexValue");
    dt.Rows.Add(new object[] {"男","1"});
    dt.Rows.Add(new object[] {"女","0"});
    return dt;
    }
    #endregion  #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
    this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
    this.DataGrid2.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid2_PageIndexChanged);
    this.DataGrid2.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid2_EditCommand);
    this.DataGrid2.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid2_ItemDataBound);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion #region DataGrid1 事件
    private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    GetValue("VsName","txbAge",3);
    GetddlValue("VsddlName","ddlSex",2);
    DataGrid1.CurrentPageIndex = e.NewPageIndex;
    BindData();
    SetValue("VsName","txbAge",3);
    SetddlValue("VsddlName","ddlSex",2);
    } private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
    DataRowView drv = (DataRowView) e.Item.DataItem;
    String strSex = drv["Sex"].ToString();
    DropDownList ddl = (DropDownList) e.Item.FindControl("ddlSex");
    ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByText(strSex));
    }
    }
    #endregion  #region DataGrid1 获取文本框函数
    /// <summary>
    /// 从DataGrid中读取文本框数据
    /// 注意:
    /// 只用于TextBox控件
    /// 要求DataGrid有关键字
    /// 读取数据的和还原数据的参数是一致的
    /// </summary>
    /// <param name="ViewStateName">VieState的名字</param>
    /// <param name="TextBoxID">要存取TextBox控件的ID</param>
    /// <param name="iRow">TextBox在DataGrid中的列系数[从0开始算]</param>
    private void GetValue(string ViewStateName,string TextBoxID,int iRow)
    {
    //取原Hashtable的值。
    Hashtable saveValue = new Hashtable();
    if(ViewState[ViewStateName] != null)
    {
    saveValue = (Hashtable)ViewState[ViewStateName];
    } string strKey,strValue;
    TextBox txb1 = new TextBox();
    foreach(DataGridItem item in DataGrid1.Items)
    {
    strKey = DataGrid1.DataKeys[item.ItemIndex].ToString();
    txb1=(TextBox)item.Cells[iRow].FindControl(TextBoxID); //有则更新,无则新增
    if(saveValue.ContainsKey(strKey))
    {
    strValue = txb1.Text.Trim();  
    saveValue[strKey] = strValue;
    }
    else
    {
    strValue = txb1.Text.Trim();  
    saveValue.Add(strKey,strValue);
    }
    }
    ViewState[ViewStateName] = saveValue;
    } /// <summary>
    /// 从DataGrid中读取文本框数据
    /// 注意:
    /// 只用于TextBox控件
    /// 要求DataGrid有关键字
    /// 读取数据的和还原数据的参数是一致的
    /// </summary>
    /// <param name="ViewStateName">VieState的名字</param>
    /// <param name="TextBoxID">要存取TextBox控件的ID</param>
    /// <param name="iRow">TextBox在DataGrid中的列系数[从0开始算]</param>
    private void SetValue(string ViewStateName,string TextBoxID,int iRow)
    {
    //取原Hashtable的值。
    Hashtable saveValue = new Hashtable();
    if(ViewState[ViewStateName] != null)
    {
    saveValue = (Hashtable)ViewState[ViewStateName];
    }
    if (saveValue == null) return;

    string strKey,strValue;
    TextBox txb1 = new TextBox();
    foreach(DataGridItem item in DataGrid1.Items)
    {
    strKey = DataGrid1.DataKeys[item.ItemIndex].ToString();
    txb1 = (TextBox)item.Cells[iRow].FindControl(TextBoxID);
    //有则还原
    if(saveValue.ContainsKey(strKey))
    {
    strValue =saveValue[strKey].ToString();
    txb1.Text = strValue;
    }
    }
    }
    #endregion
      

  8.   

    #region DataGrid1 获取下拉框函数
    /// <summary>
    /// 从DataGrid中读取下拉框数据
    /// 注意:
    /// 只用于DropDownList控件
    /// 要求DataGrid有关键字
    /// 读取数据的和还原数据的参数是一致的
    /// </summary>
    /// <param name="ViewStateName">VieState的名字</param>
    /// <param name="DropDownListID">要存取DropDownList控件的ID</param>
    /// <param name="iRow">DropDownList在DataGrid中的列系数[从0开始算]</param>
    private void GetddlValue(string ViewStateName,string DropDownListID,int iRow)
    {
    //取原Hashtable的值。
    Hashtable saveValue = new Hashtable();
    if(ViewState[ViewStateName] != null)
    {
    saveValue = (Hashtable)ViewState[ViewStateName];
    } string strKey,strValue;
    DropDownList ddl1 = new DropDownList();
    foreach(DataGridItem item in DataGrid1.Items)
    {
    strKey = DataGrid1.DataKeys[item.ItemIndex].ToString();
    ddl1=(DropDownList)item.Cells[iRow].FindControl(DropDownListID); //有则更新,无则新增
    if(saveValue.ContainsKey(strKey))
    {
    strValue = ddl1.SelectedItem.Text.Trim();  
    saveValue[strKey] = strValue;
    }
    else
    {
    strValue = ddl1.SelectedItem.Text.Trim();  
    saveValue.Add(strKey,strValue);
    }
    }
    ViewState[ViewStateName] = saveValue;
    } /// <summary>
    /// 从DataGrid中读取下拉框数据
    /// 注意:
    /// 只用于DropDownList控件
    /// 要求DataGrid有关键字
    /// 读取数据的和还原数据的参数是一致的
    /// </summary>
    /// <param name="ViewStateName">VieState的名字</param>
    /// <param name="DropDownListID">要存取DropDownList控件的ID</param>
    /// <param name="iRow">DropDownList在DataGrid中的列系数[从0开始算]</param>
    private void SetddlValue(string ViewStateName,string DropDownListID,int iRow)
    {
    //取原Hashtable的值。
    Hashtable saveValue = new Hashtable();
    if(ViewState[ViewStateName] != null)
    {
    saveValue = (Hashtable)ViewState[ViewStateName];
    }
    if (saveValue == null) return;

    string strKey,strValue;
    DropDownList ddl1 = new DropDownList();
    foreach(DataGridItem item in DataGrid1.Items)
    {
    strKey = DataGrid1.DataKeys[item.ItemIndex].ToString();
    ddl1=(DropDownList)item.Cells[iRow].FindControl(DropDownListID);
    //有则还原
    if(saveValue.ContainsKey(strKey))
    {
    strValue =saveValue[strKey].ToString();
    ddl1.SelectedIndex =-1;
    ddl1.Items.FindByText(strValue).Selected =true;
    }
    }
    }
    #endregion  #region DataGrid2 事件
    private void DataGrid2_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    DataGrid2.CurrentPageIndex =e.NewPageIndex;
    BindData2();
    }
    private void DataGrid2_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    DataGrid2.EditItemIndex =e.Item.ItemIndex;
    BindData2();
    }
    private void DataGrid2_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemType == ListItemType.EditItem)
    {
    DataRowView drv = (DataRowView) e.Item.DataItem;
    String strSex = drv["Sex"].ToString();
    DropDownList ddl = (DropDownList) e.Item.FindControl("ddlSex2");
    ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByText(strSex));
    }
    }
    #endregion 
    }
    }
      

  9.   

    东方未名,能留个qq么?有事请教。我的qq:45377508