<asp:DataGrid ID="dgMain" runat="server" AutoGenerateColumns="False" Font-Size="13px">
   <SelectedItemStyle Font-Names="宋体" Font-Size="9pt" />
   <EditItemStyle BackColor="Info" Font-Bold="True" Font-Names="宋体" Font-Size="9pt"/>
   <AlternatingItemStyle BackColor="White" Font-Names="宋体" Font-Size="9pt" ForeColor="ControlText" />
   <ItemStyle BackColor="WhiteSmoke" Font-Names="宋体" Font-Size="9pt" ForeColor="ControlText" />
   <HeaderStyle BackColor="#99CCCC" Font-Bold="True" ForeColor="Black" HorizontalAlign="Center"
      VerticalAlign="Middle" Font-Italic="False" Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
   <Columns>
   
   <asp:TemplateColumn HeaderText="字段">
       <HeaderStyle Width="150px" />
           <ItemTemplate>
               <asp:DropDownList ID="TFld" runat="server" Width="150px">
  '****** 动态增加 ListItem  并在回传后保持里面的内容 *******          
               </asp:DropDownList>
           </ItemTemplate>
       </asp:TemplateColumn>
   </Columns>
</asp:DataGrid>

解决方案 »

  1.   

    忘了写,问题内容,
    要在模板列里面动态增加列,并在回传即 ispostback 后,仍保持里面 dropdownlist 中选择的内容
      

  2.   

    要在模板列里面动态增加列,并在回传即 ispostback 后,仍保持里面 dropdownlist 中选择的内容
    ====================================================
    动态的列写到ViewState中,提交到服务器后再从ViewState里读出来写到DropDownList里
      

  3.   

    要在模板列里面动态增加列,并在回传即 ispostback 后,仍保持里面 dropdownlist 中选择的内容
    ----------------
    强烈不支持如此动态添加删除列,很难以维护状态,请考虑使用 visible 属性,简单又方便
      

  4.   

    请考虑使用 visible 属性,简单又方便
    ==================================
    呵呵,怎么听着像在做广告
      

  5.   

    重写
    override void LoadViewState(object savedState)
    override object SaveViewState()
      

  6.   

    使用 viewstate 好象能保持 固定设好的列,但对于 动态增加的列好象无法保持,当我点击任何触发 ispostback 事件的对象时,在页面还没提交之前,好象首先触发 loadviewstate,
    但在 loadviewstate 中我去判断 datagrid 对象的 行数时,却是 0 ,
    因此,很难在 ispostback 之前保存动态模板列的内容,如果大家有碰到过,
    能否给一些参考资料?
      

  7.   

    而且你这个DropDownList里的内容动态填加以后,是每个Item都一样,还是都有各自的内容,后者显然不大好做
      

  8.   

    这个列是全部自己增加的,把数据库里预设定的字段读到这里面,
    自然,每个ITEM 都是不一样,如果都一样,显然没那么复杂了
      

  9.   

    给你个测试代码,你看看需要什么功能再交流//
    <%@ Page language="c#" Codebehind="DataGridDemo.aspx.cs" AutoEventWireup="false" Inherits="DataGridDemo" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>DataGrid</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>
    <form id="Form1" method="post" runat="server">
    <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False">
    <Columns>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:BoundColumn DataField="au_id" ReadOnly="True" HeaderText="au_id"></asp:BoundColumn>
    <asp:TemplateColumn HeaderText="state">
    <ItemTemplate>
    <asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    <asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
    <asp:Button id="Button1" runat="server" Text="添加"></asp:Button>
    </form>
    </body>
    </HTML>//aspx.cs
    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.Data.SqlClient;public class DataGridDemo : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Button btnDelete;
    protected System.Web.UI.WebControls.Button Button1;
    protected System.Web.UI.WebControls.TextBox TextBox1;
    protected System.Web.UI.WebControls.DataGrid DataGrid1; private DataTable BindDropDownList()
    {
    SqlConnection cn = new SqlConnection("server=.;uid=sa;pwd=;database=pubs");
    SqlDataAdapter da = new  SqlDataAdapter("select distinct state from authors", cn);
    DataSet ds = new DataSet();
    cn.Open();
    da.Fill(ds);
    cn.Close();
    return ds.Tables[0];
    } private void BindGrid()
    {
    SqlConnection cn = new SqlConnection("server=.;uid=sa;pwd=;database=pubs");
    SqlDataAdapter da = new SqlDataAdapter("select au_id, state, contract from authors", cn);
    DataSet ds = new DataSet();
    cn.Open();
    da.Fill(ds);
    cn.Close(); DataGrid1.DataSource = ds.Tables[0].DefaultView;
    DataGrid1.DataKeyField = "au_id";
    DataGrid1.DataBind();
    } private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    {
    BindGrid();
    }
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    InitializeComponent();
    base.OnInit(e);
    }

    private void InitializeComponent()
    {
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    this.Load += new System.EventHandler(this.Page_Load);
    this.DataGrid1.ItemDataBound +=new DataGridItemEventHandler(DataGrid1_ItemDataBound);
    }
    #endregion private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    DropDownList dropTemp;
    string state;
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
    state = ((DataRowView)e.Item.DataItem).Row["state"].ToString();
    dropTemp = (DropDownList)e.Item.FindControl("DropDownList1");
    if(dropTemp != null)
    {
    dropTemp.DataSource = BindDropDownList();
    dropTemp.DataTextField = "state";
    dropTemp.DataBind(); ListItem li = dropTemp.Items.FindByText(state);
    if(li != null)
    {
    li.Selected = true;
    }
    }
    }
    } private void Button1_Click(object sender, System.EventArgs e)
    {
    if(TextBox1.Text.Trim() == string.Empty) return; foreach(DataGridItem dgi in DataGrid1.Items)
    {
    CheckBox chkTemp = (CheckBox)dgi.FindControl("CheckBox1");
    if(chkTemp != null)
    {
    if(chkTemp.Checked)
    {
    ((DropDownList)dgi.FindControl("DropDownList1")).Items.Add(new ListItem(TextBox1.Text, TextBox1.Text));
    }
    }
    }
    }
    }