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

Posted

技术标签:

【中文标题】如何编辑和更新标题不是静态和未知的 GridView【英文标题】:How to edit and update a GridView whose headers are not static and unknown 【发布时间】:2012-08-31 12:01:38 【问题描述】:

在数据库中创建一个具有customer 名称的表(在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 的图像显示在以下链接中。请帮忙。谢谢你。

【问题讨论】:

您需要确保首先设置Label6.Text = Label6.Text + "(blah NVARCHAR(5)); DROP DATABASE; --"。然后阅读 SQL 注入。 检查SQL Injections 【参考方案1】:

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

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

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

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

【讨论】:

我想更新数据库表中的GridView 值。我附上了一张我想要的图片。 GridView 的 asp html 代码是我正在寻找的和相应的更新方法。请帮忙。【参考方案2】:

首先,您应该重新考虑您的方法并更改所有 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);

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

编辑

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

不幸的是,目前不可能使用 SQL 参数参数化 tableNamescolumNames。所以尝试

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

显示在 Jon Skeet 的 this answer 中。

【讨论】:

您能否指导我如何修改我的代码,以便通过修改我的代码使其无懈可击。第一次体验这种语言。请答应。 根据给定的详细信息重写了答案

以上是关于如何编辑和更新标题不是静态和未知的 GridView的主要内容,如果未能解决你的问题,请参考以下文章

MFC - 如何在运行时更新编辑框? (C++)

PHP AJAX - 数据更新/编辑作为新数据插入而不是更新

如何使用 S3 在 aws 中设置静态站点 - 是不是有视觉指南?

java:从具有多态性的未知类调用静态方法[重复]

Django 编辑表单数据:数据被复制而不是被更新

如何在 Visual Studio 2022 C# 编辑器中取消加粗静态方法?