0

我在 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 我无法解决这个问题。请帮忙。谢谢

4

2 回答 2

2

尝试这个。

您可以根据自己对 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);
        }
    }

如果您想避免 TextBox 出现在 CheckBox 列中,请将循环变量 j 初始化为 1 而不是 0。

        for( int j=1;j<n;j++)
于 2013-05-24T16:42:04.640 回答
0

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

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

FindControl方法记录在这里

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

于 2013-05-24T15:45:17.720 回答