如何编辑和更新标题不是静态和未知的GridView

时间:2012-08-31 12:01:38

标签: c# asp.net gridview

在数据库中创建一个表,其中包含客户名称(在TextBox中输入)。创建的表的字段是ListBox中的项目。像:

com = new SqlCommand("CREATE TABLE " + Label6.Text + " (Locations nvarchar(20), " + ListBox3.Items[0].ToString().Trim() + " nvarchar(5))", con);
con.Open();
com.ExecuteNonQuery();
con.Close();

for (int i = 1; i <= ListBox3.Items.Count-1; i++)
{
    com = new SqlCommand("ALTER TABLE " + Label6.Text + " ADD " + ListBox3.Items[i].Text.Trim() + " nvarchar(5)", con);
    con.Open();
    com.ExecuteNonQuery();
    con.Close();
}

我正在使用GridView进一步显示此表格。像:

SqlCommand com = new SqlCommand("SELECT * FROM " + Label6.Text + "", con);
SqlDataAdapter da = new SqlDataAdapter(com);
DataTable dt = new DataTable();
da.Fill(dt);
GridView2.DataSource = dt;
GridView2.DataBind();

GridView的asp代码是:

<Columns>
    <asp:CommandField ShowEditButton="True" />
</Columns>

因此,我希望第一列是只读的。 我想编辑GridView并更新数据库中的客户(指Label6.Text)表。注意:我希望GridView只接受整数。

我的数据库表和Gridview的图像显示在以下链接中。请帮助。谢谢。

enter image description here

2 个答案:

答案 0 :(得分:0)

要仅接受数字输入,您可以使用jQuery插件。提出了一些可能性here

com = new SqlCommand("ALTER TABLE " + Label6.Text + " ADD " + ListBox3.Items[i].Text.Trim() + " nvarchar(5)", con);

这种方法让您容易受到SQL-injection的攻击。通过构建类似的SQL语句,整个应用程序都非常脆弱。

要更新数据库,您可以采用与从表格中创建/选择的方式类似的方式工作。

答案 1 :(得分:0)

首先,您应重新考虑您的方法并更改所有SQL语句以使用SQL参数。现在您的代码极易受SQL注入攻击SO上有大量示例,或者只看一下MSDN

此外,我不认为让用户动态创建表和数据是一个很好的决定。无论如何 - 如果你真的想以这种方式实现它,你可以动态添加列

for (int i = 0; i < dt.Columns.Count; i++)
{
    DataColumn dc = dt.Columns[i];
    BoundField bf = new BoundField();
    bf.ReadOnly = i == 0;  // will take care of setting controls to readonly in column 0
    bf.DataField = dc.ColumnName;
    GridView1.Columns.Add(bf);
}

不幸地添加一个只允许数字的列并不容易。在这种情况下,有必要动态创建templateField并将其添加到列。请查看this example

修改

如果您尝试动态添加值到表格,则应使用 SQL参数。 (例如INSERT INTO tblXYZ (abc, def) values (@valueForABC, @valueForDEF)

不幸的是,现在不可能使用SQL参数来参数化tableNames columNames 。所以试着

  

...将字符限制为A-Z,a-z,0-9,'。','_'和'' - 和   然后使用任何适当的包围对数据库(例如   我相信SQL Server的[]包裹整个事情。

显示在Jon Skeet的this answer中。