在gridview的RowDataBound事件中,动态的把编辑行的默认textbox换成dropdownlist,但点“更新”后取不到dropdownlist的值,哪位大侠遇到过,如何解决?

解决方案 »

  1.   

    不用这样吧,直接设置成模板列,把编辑行设置成dropdownlist,然后再在RowDataBound事件中的编辑行对dropdownlist进行绑定,和设置当前值
      

  2.   

    代码比较长,呵呵///edit2.aspx.csusing System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;public partial class edit2 : System.Web.UI.Page
    {
        private SqlConnection conn;
        private SqlCommand comm;
        private SqlDataAdapter a;    protected void Page_Load(object sender, EventArgs e)
        {        if (!IsPostBack)
            {
                dsBind();
                TextBox1.Text = "";
            }    }    private void dsBind()
        {
            GridView1.Visible = true;
            GridView1.DataSource = getDS();
            GridView1.DataBind();
        }    private DataSet getDS()
        {
            string conn_string = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ToString();        conn = new SqlConnection(conn_string);
            comm = new SqlCommand();
            comm.CommandType = CommandType.Text;
            comm.CommandText = "select CustomerID, CompanyName, ContactName, ContactTitle  from customers  --where CustomerID='ssssssssssss'";
            comm.Connection = conn;        conn.Open();
            a = new SqlDataAdapter();
            a.SelectCommand = comm;        DataSet ds = new DataSet();
            a.Fill(ds);        a.Dispose();
            comm.Dispose();
            conn.Close();        return ds;
        }    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView1.PageIndex = e.NewPageIndex;
            dsBind();
        }    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
            dsBind();
        }
        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            GridView1.EditIndex = -1;
            dsBind();
        }
        protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
        {
        }
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow && (e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)
            {
                GridViewRow row = e.Row;
     
                for (int index = 1; index < row.Cells.Count; ++index)
                {
                    if (GridView1.HeaderRow.Cells[index].Text == "CompanyName")
                    {
                        row.Cells[index].Controls.Clear(); //清除编辑行的CompanyName列默认的textbox                   // DropDownList d = new DropDownList();
                        TextBox d = new TextBox();
                        d.Attributes.Add("size", "4");                    row.Cells[index].Controls.AddAt(0, d); //为编辑行的CompanyName列重新添加textbox
                    }
                }
            }    }
        
      protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
                 GridViewRow row = GridView1.Rows[e.RowIndex];
                for (int index = 1; index < row.Cells.Count; ++index)
                {                    foreach (Control control in row.Cells[index].Controls)
                        {
                            if (control is TextBox)
                            {
                                TextBox3.Text = TextBox3.Text + "," + ((TextBox)control).Text; //CompanyName列的textbox取不到值
                            }
                        }
            }        GridView1.EditIndex = -1;
            dsBind();
        }
        
        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
           // Response.Write("xxxxxxxxxxxxxxxxxxx");
            if (e.CommandName == "insert")
            {
                GridViewRow row = GridView1.FooterRow;
                TextBox3.Text = TextBox3.Text + "##" + ((TextBox)row.Cells[1].Controls[0]).Text;
            }
            else
            {
                TextBox3.Text = "???????????";
            }
        }
    }   
      

  3.   


    ///edit2.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeFile="edit2.aspx.cs" Inherits="edit2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
        <link href="ttttt.css" rel="stylesheet" type="text/css" />
    </head>
    <body><center>
        <form id="form1" runat="server">
        <div>
        
            
            <asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="10" OnPageIndexChanging="GridView1_PageIndexChanging" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" AutoGenerateEditButton="True" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnRowCreated="GridView1_RowCreated" OnRowDataBound="GridView1_RowDataBound" OnRowCommand="GridView1_RowCommand" ShowFooter="True">
            <PagerSettings Position="TopAndBottom" Mode="NumericFirstLast" />
            <RowStyle ForeColor="#000066" />
            <FooterStyle BackColor="White" ForeColor="#000066" />
            <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
            <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
            </asp:GridView>
            
            <!--
            <asp:GridView ID="GridView11" runat="server" AllowPaging="True" PageSize="10" OnPageIndexChanging="GridView1_PageIndexChanging" AutoGenerateEditButton="True" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnRowCreated="GridView1_RowCreated" OnRowDataBound="GridView1_RowDataBound" OnRowCommand="GridView1_RowCommand" ShowFooter="True" CssClass="GridViewStyle">
            <PagerSettings Position="TopAndBottom" Mode="NumericFirstLast" />
            <FooterStyle CssClass="FooterStyle" />
            <RowStyle CssClass="RowStyle" />
            <EmptyDataRowStyle CssClass="EmptyRowStyle" />
            <PagerStyle CssClass="PagerStyle" />
            <SelectedRowStyle CssClass="SelectedRowStyle" />
            <HeaderStyle CssClass="HeaderStyle" />
            <EditRowStyle CssClass="EditRowStyle" />
            <AlternatingRowStyle CssClass="AltRowStyle" />
            </asp:GridView>
            -->
            
            
            
            
            
            <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        
        
        
        </div>
        </form></center>
    </body>
    </html>
      

  4.   

    http://blog.csdn.net/xianfajushi/archive/2008/11/30/3413317.aspx
      

  5.   

     // 得到当前的行对象
       GridViewRow row = GridView1.Rows[e.RowIndex];
    1)普通列
      (控件类型)GridViewRow.Cells[索引].Controls[索引]
    2)模板列
      (控件类型)GridViewRow.FindControl("控件ID")
      

  6.   

     ((DropDownList)(GridView1.Rows[e.RowIndex].FindControl("要找的ID"))).SelectedIndex这样!!!
      

  7.   

    调试了下,发现不是取不到值,还是点了更新后,在GridView1_RowUpdating事件里,自已在GridView1_RowDataBound中new的textbox不见了
      

  8.   

    在rowcreate中new控件,在rowdatabouand中绑定数据,搞定了