【问题标题】:converting cells into text boxes where check box is checked将单元格转换为选中复选框的文本框
【发布时间】:2013-05-25 00:42:04
【问题描述】:

我在 c# 中使用 mysql 和 asp.net。我有一个网格视图,它将显示动态选择的表数据。我能够显示所选表的数据。在第一列中,我在网格视图之外添加了一个复选框和一个按钮。当用户选择复选框并单击按钮时,选定的行必须变成文本框。我能够找到选中的复选框,但我无法将单元格转换为文本框。这是我的代码:

     int n = GridView1.HeaderRow.Cells.Count;

    for( int i=0; i < GridView1.Rows.Count;i++)
    {

        GridViewRow row = GridView1.Rows[i];
        bool isChecked = ((CheckBox)row.FindControl("CheckBox1")).Checked;

        {
            for( int j=0;j<n;j++)
            {
                TextBox txt = ((TextBox)GridView1.Rows[i].Cells[j]).Text;

            }
        }
    }

在这一行:TextBox txt = ((TextBox)GridView1.Rows[i].Cells[j]).Text; 我收到警告: cannot convert 'System.Web.UI.Controls.TableCell' to type 'System.Web.UI.Controls.TextBox 我无法解决这个问题。请帮忙。谢谢

【问题讨论】:

  • 有内置功能可以使gridview数据可编辑;我建议您在重新发明轮子之前对此进行调查。这是 .NET 2.0 中的一个示例,但我认为在最近的版本中并没有很多变化:codeproject.com/Articles/23471/Editable-GridView-in-ASP-NET-2-0
  • TextBox txt = ((TextBox)GridView1.Rows[i].Cells[j]).Text;??????你是如何尝试将字符串的单元格文本转换为 TextBox 类型的控件??????
  • 警告说明了一切。请上传aspx页面。
  • 问题是我正在使用 mysql 并且我正在动态地将表绑定到我的网格。也就是说,我有一个下拉列表,用户可以从中选择表格。所以我根本不知道列名。我必须动态地做每一件事。这就是为什么我不能使用编辑删除按钮。我尝试在 aspx &lt;asp:CommandField showEditButton="true"&gt; 中添加具有以下属性的编辑按钮,我为OnRowEditing="grid_Edit 编写了一个函数。在我写的函数中:GridView1.EditIndex = e.NewEditIndex; fill_grid();当我运行它时,它会显示编辑按钮,但是当我点击它时,会发生 nthg

标签: c# asp.net mysql


【解决方案1】:

试试这个。

您可以根据自己使用 C# 的实际情况删除一行或几行。

概念是,您应该创建一个 TextBox,为该文本框分配单元格文本,然后将该新创建的文本框添加到特定行的 Grid Cell 的子控件。

如果您觉得有用,请标记此解决方案。

    bool isChecked = ((CheckBox)row.FindControl("CheckBox1")).Checked;
    if(isChecked)
    {
        for( int j=0;j<n;j++)
        {
            TextBox tbForCell = new TextBox();
            tbForCell.Text = GridView1.Rows[i].Cells[j].Text;
            GridView1.Rows[i].Cells[j].Text = "";
            GridView1.Rows[i].Cells[j].Controls.Add(tbForCell);
        }
    }

如果你想避免文本框出现在复选框列中,请将循环变量 j 初始化为 1 而不是 0。

        for( int j=1;j<n;j++)

【讨论】:

    【解决方案2】:

    您的方法调用正在寻找单元格。文本框是包含在单元格中的控件。试试这样的:

    TextBox txt = ((TextBox) GridView1.Rows[i].Cells[j].FindControl("textbox name")).Text;
    

    FindControl 方法记录在 here

    还请接受@Bartdude 关于使用可编辑网格视图的建议。如果一个至少与您尝试手动滚动的效果一样好,那么值得花时间学习如何使用它。

    【讨论】:

    • 是的,我会尝试的。但我不知道确切的列名,因为我正在根据下拉列表中的选定项目动态显示网格
    • 你里面真的有一个文本框吗?如果没有,而且它只是一个普通单元格,我认为您可以使用 string txt = ((TableCell)GridView1.Rows[i].Cells[j]).Text; 来获取单元格内容。但是如果那里真的有一个TextBox,那是行不通的,而且我无法从发布的代码中判断是否有。
    猜你喜欢
    • 2014-03-18
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多