none
获取GRIDVIEW单元格的值 RRS feed

  • 问题

  • protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {

    Label3.Text = GridView1.Rows[e.RowIndex].Cells[2].Text.Trim();//这一行的值为空

    Label1.Text =GridView1.Rows[11].Cells[2].Text.Trim();//这一行却可以获得值。

    Label2.Text = e.RowIndex.ToString();//这样可以获得行号

      }

    不知道问题出在哪里了。

    Label3.Text = GridView1.Rows[e.RowIndex].Cells[2].Text.Trim();//这一行的值为空,到底错在哪里呢?

    2012年3月12日 11:56

答案

  • 楼主,不行请点击我QQ标志远程我看看
    从代码上看不出有什么问题所在……嗯,要不尝试一下这个代码:

    Label3.Text = (GridView1.Rows[e.RowIndex].Cells[2].Controls[0] as TextBox).Text;


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已编辑 ThankfulHeart 2012年3月13日 2:18
    • 已标记为答案 彭123 2012年3月13日 2:55
    2012年3月13日 2:15
  • 哦,请引入命名空间,并且取消注释。我只是演示你局部问题,下面给出完整代码:

     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                EnableModelValidation="True" onrowediting="GridView1_RowEditing" 
                onrowupdating="GridView1_RowUpdating">
                <Columns>
                    <asp:CommandField ShowEditButton="True" />
                    <asp:BoundField DataField="col1" HeaderText="Col1" />
                    <asp:BoundField DataField="col2" HeaderText="Col2" />
                    <asp:BoundField DataField="col3" HeaderText="Col3" />
                </Columns>
            </asp:GridView>
    using System.Data; 
    public partial class WebForm1 : Page
        {
            private void MyBind()
            {
                DataTable dt = ViewState["dt"as DataTable;
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }

            protected void Page_Load(object senderEventArgs e)
            {
                if (!IsPostBack)
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("col1"typeof(string));
                    dt.Columns.Add("col2"typeof(string));
                    dt.Columns.Add("col3"typeof(string));
                    //产生随机数字
                    for (int i = 1i < 11i++)
                    {
                        dt.Rows.Add(i.ToString(), "Row" + i"Col" + (i+2));
                    }
                    ViewState["dt"= dt;
                    MyBind();
                }
            }

            protected void GridView1_RowEditing(object senderGridViewEditEventArgs e)
            {
                GridView1.EditIndex = e.NewEditIndex;
                MyBind();
            }

            protected void GridView1_RowUpdating(object senderGridViewUpdateEventArgs e)
            {
                //变更编辑列的字段
                DataTable dt = ViewState["dt"as DataTable;
                Response.Write((GridView1.Rows[e.RowIndex].Cells[3].Controls[0as TextBox).Text);
                dt.Rows[e.RowIndex][2] = (GridView1.Rows[e.RowIndex].Cells[3].Controls[0] as TextBox).Text;
                ViewState["dt"] = dt;
                GridView1.EditIndex = -1;
                MyBind();
            }
        }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    • 已编辑 ThankfulHeart 2012年3月13日 3:01
    • 已标记为答案 彭123 2012年3月13日 3:09
    2012年3月13日 3:01

全部回复

  • 请检查一下你的GridView第二列是不是TemplateField而不是自动生成列或者BoundField?如果是TemplateField的话,请尝试使用FindControl来完成,示例代码:

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
    Label3.Text = (GridView1.Rows[e.RowIndex].FindControl("TextBox的ID") as TextBox).Text;
        }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月13日 1:41
  • 可以麻煩你把GridView1的ASPX內容傳上來看看嗎?

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月13日 1:59
  • <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                DataKeyNames="序号" DataSourceID="SqlDataSource1" 
                onrowupdating="GridView1_RowUpdating" PageSize="30">
                <Columns>
                    <asp:CommandField ShowEditButton="True" />
                    <asp:BoundField DataField="序号" HeaderText="序号" InsertVisible="False" 
                        ReadOnly="True" SortExpression="序号" />
                    <asp:BoundField DataField="col1" HeaderText="col1" SortExpression="col1" />
                    <asp:BoundField DataField="col2" HeaderText="col2" SortExpression="col2" />
                </Columns>
            </asp:GridView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:TEST2ConnectionString %>" 
                DeleteCommand="DELETE FROM [test] WHERE [序号] = @序号" 
                InsertCommand="INSERT INTO [test] ([col1], [col2]) VALUES (@col1, @col2)" 
                SelectCommand="SELECT * FROM [test]" 
                UpdateCommand="UPDATE [test] SET [col1] = @col1, [col2] = @col2 WHERE [序号] = @序号">
                <DeleteParameters>
                    <asp:Parameter Name="序号" Type="Int64" />
                </DeleteParameters>
                <InsertParameters>
                    <asp:Parameter Name="col1" Type="String" />
                    <asp:Parameter Name="col2" Type="String" />
                </InsertParameters>
                <UpdateParameters>
                    <asp:Parameter Name="col1" Type="String" />
                    <asp:Parameter Name="col2" Type="String" />
                    <asp:Parameter Name="序号" Type="Int64" />
                </UpdateParameters>
            </asp:SqlDataSource>

    2012年3月13日 2:09
  • 请检查一下你的GridView第二列是不是TemplateField而不是自动生成列或者BoundField?如果是TemplateField的话,请尝试使用FindControl来完成,示例代码:

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
    Label3.Text = (GridView1.Rows[e.RowIndex].FindControl("TextBox的ID") as TextBox).Text;
        }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    我是使用绑定数据的。
    2012年3月13日 2:10
  • 請問你每一個ROW的col2都有值嗎?

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月13日 2:13
  • 楼主,不行请点击我QQ标志远程我看看
    从代码上看不出有什么问题所在……嗯,要不尝试一下这个代码:

    Label3.Text = (GridView1.Rows[e.RowIndex].Cells[2].Controls[0] as TextBox).Text;


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已编辑 ThankfulHeart 2012年3月13日 2:18
    • 已标记为答案 彭123 2012年3月13日 2:55
    2012年3月13日 2:15
  • 請問你每一個ROW的col2都有值嗎?

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/


    是的,每一个都有值。
    2012年3月13日 2:25
  • 对,请采用我上面一个帖子的方法,下面给出模拟测试代码:

     public partial class WebForm1 : Page
        {
            private void MyBind()
            {
                DataTable dt = ViewState["dt"as DataTable;
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }

            protected void Page_Load(object senderEventArgs e)
            {
                if (!IsPostBack)
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("col1"typeof(string));
                    dt.Columns.Add("col2"typeof(string));
                    dt.Columns.Add("col3"typeof(string));
                    //产生随机数字
                    for (int i = 1i < 11i++)
                    {
                        dt.Rows.Add(i.ToString(), "Row" + i"Col" + (i+2));
                    }
                    ViewState["dt"= dt;
                    MyBind();
                }
            }

            protected void GridView1_RowEditing(object senderGridViewEditEventArgs e)
            {
                GridView1.EditIndex = e.NewEditIndex;
                MyBind();
            }

            protected void GridView1_RowUpdating(object senderGridViewUpdateEventArgs e)
            {
                //变更编辑列的字段
                DataTable dt = ViewState["dt"as DataTable;
                Response.Write((GridView1.Rows[e.RowIndex].Cells[3].Controls[0as TextBox).Text);
                //dt.Rows[e.RowIndex][2] = (GridView1.Rows[e.RowIndex].Cells[3].Controls[0] as TextBox).Text;
                //ViewState["dt"] = dt;
                //GridView1.EditIndex = -1;
                //MyBind();
            }
        }

    补充说明:因为Updating的时候,当前行已经是一个TextBox而非Cell,必须使用转化成TextBox获取内容。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月13日 2:37
  • 对,请采用我上面一个帖子的方法,下面给出模拟测试代码:

     public partial class WebForm1 : Page
        {
            private void MyBind()
            {
                DataTable dt = ViewState["dt"as DataTable;
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }

            protected void Page_Load(object senderEventArgs e)
            {
                if (!IsPostBack)
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("col1"typeof(string));
                    dt.Columns.Add("col2"typeof(string));
                    dt.Columns.Add("col3"typeof(string));
                    //产生随机数字
                    for (int i = 1i < 11i++)
                    {
                        dt.Rows.Add(i.ToString(), "Row" + i"Col" + (i+2));
                    }
                    ViewState["dt"= dt;
                    MyBind();
                }
            }

            protected void GridView1_RowEditing(object senderGridViewEditEventArgs e)
            {
                GridView1.EditIndex = e.NewEditIndex;
                MyBind();
            }

            protected void GridView1_RowUpdating(object senderGridViewUpdateEventArgs e)
            {
                //变更编辑列的字段
                DataTable dt = ViewState["dt"as DataTable;
                Response.Write((GridView1.Rows[e.RowIndex].Cells[3].Controls[0as TextBox).Text);
                //dt.Rows[e.RowIndex][2] = (GridView1.Rows[e.RowIndex].Cells[3].Controls[0] as TextBox).Text;
                //ViewState["dt"] = dt;
                //GridView1.EditIndex = -1;
                //MyBind();
            }
        }

    补充说明:因为Updating的时候,当前行已经是一个TextBox而非Cell,必须使用转化成TextBox获取内容。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    按照你上面的回复,我已经取得我想要的值。非常的感谢!!!

    但是我在对你下面提供的实例进行测试时发现你没有写引用

    using System.Data;

    同时进行测试时单击更新或者取消无法退出编辑模式。

    2012年3月13日 2:59
  • 哦,请引入命名空间,并且取消注释。我只是演示你局部问题,下面给出完整代码:

     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                EnableModelValidation="True" onrowediting="GridView1_RowEditing" 
                onrowupdating="GridView1_RowUpdating">
                <Columns>
                    <asp:CommandField ShowEditButton="True" />
                    <asp:BoundField DataField="col1" HeaderText="Col1" />
                    <asp:BoundField DataField="col2" HeaderText="Col2" />
                    <asp:BoundField DataField="col3" HeaderText="Col3" />
                </Columns>
            </asp:GridView>
    using System.Data; 
    public partial class WebForm1 : Page
        {
            private void MyBind()
            {
                DataTable dt = ViewState["dt"as DataTable;
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }

            protected void Page_Load(object senderEventArgs e)
            {
                if (!IsPostBack)
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("col1"typeof(string));
                    dt.Columns.Add("col2"typeof(string));
                    dt.Columns.Add("col3"typeof(string));
                    //产生随机数字
                    for (int i = 1i < 11i++)
                    {
                        dt.Rows.Add(i.ToString(), "Row" + i"Col" + (i+2));
                    }
                    ViewState["dt"= dt;
                    MyBind();
                }
            }

            protected void GridView1_RowEditing(object senderGridViewEditEventArgs e)
            {
                GridView1.EditIndex = e.NewEditIndex;
                MyBind();
            }

            protected void GridView1_RowUpdating(object senderGridViewUpdateEventArgs e)
            {
                //变更编辑列的字段
                DataTable dt = ViewState["dt"as DataTable;
                Response.Write((GridView1.Rows[e.RowIndex].Cells[3].Controls[0as TextBox).Text);
                dt.Rows[e.RowIndex][2] = (GridView1.Rows[e.RowIndex].Cells[3].Controls[0] as TextBox).Text;
                ViewState["dt"] = dt;
                GridView1.EditIndex = -1;
                MyBind();
            }
        }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    • 已编辑 ThankfulHeart 2012年3月13日 3:01
    • 已标记为答案 彭123 2012年3月13日 3:09
    2012年3月13日 3:01
  • 哦,请引入命名空间,并且取消注释。我只是演示你局部问题,下面给出完整代码:

     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                EnableModelValidation="True" onrowediting="GridView1_RowEditing" 
                onrowupdating="GridView1_RowUpdating">
                <Columns>
                    <asp:CommandField ShowEditButton="True" />
                    <asp:BoundField DataField="col1" HeaderText="Col1" />
                    <asp:BoundField DataField="col2" HeaderText="Col2" />
                    <asp:BoundField DataField="col3" HeaderText="Col3" />
                </Columns>
            </asp:GridView>
    using System.Data; 
    public partial class WebForm1 : Page
        {
            private void MyBind()
            {
                DataTable dt = ViewState["dt"as DataTable;
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }

            protected void Page_Load(object senderEventArgs e)
            {
                if (!IsPostBack)
                {
                    DataTable dt = new DataTable();
                    dt.Columns.Add("col1"typeof(string));
                    dt.Columns.Add("col2"typeof(string));
                    dt.Columns.Add("col3"typeof(string));
                    //产生随机数字
                    for (int i = 1i < 11i++)
                    {
                        dt.Rows.Add(i.ToString(), "Row" + i"Col" + (i+2));
                    }
                    ViewState["dt"= dt;
                    MyBind();
                }
            }

            protected void GridView1_RowEditing(object senderGridViewEditEventArgs e)
            {
                GridView1.EditIndex = e.NewEditIndex;
                MyBind();
            }

            protected void GridView1_RowUpdating(object senderGridViewUpdateEventArgs e)
            {
                //变更编辑列的字段
                DataTable dt = ViewState["dt"as DataTable;
                Response.Write((GridView1.Rows[e.RowIndex].Cells[3].Controls[0as TextBox).Text);
                dt.Rows[e.RowIndex][2] = (GridView1.Rows[e.RowIndex].Cells[3].Controls[0] as TextBox).Text;
                ViewState["dt"] = dt;
                GridView1.EditIndex = -1;
                MyBind();
            }
        }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    哦,实在是对不起,原来是我自己没有注意到。我下次会细心点。

    再次感谢您的指导。

    2012年3月13日 3:08
  • 没有关系!希望下次多多来MSDN讨论技术问题,或者提出你的解决方案!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月13日 3:13