C# 在C语言中为gridview列指定别名

C# 在C语言中为gridview列指定别名,c#,asp.net,sql-server,gridview,alias,C#,Asp.net,Sql Server,Gridview,Alias,我有一个没有数据源绑定的GridView。在运行时,此GridView显示运行时的一些行。用户应该能够在运行时更改列标题文本。所以我想用这种方式来实现- 用户将双击[或单击]列标题,用户将看到一个文本框,用户将在其中输入新文本,一旦用户离开文本框,新列标题文本将设置为列的HeaderText属性。这能实现吗?任何人都可以共享示例代码来实现相同的功能吗?我将非常感谢你。任何帮助都是值得的 这是我的网格 <asp:GridView ID="GdvTestData" runat="server

我有一个没有数据源绑定的GridView。在运行时,此GridView显示运行时的一些行。用户应该能够在运行时更改列标题文本。所以我想用这种方式来实现-

用户将双击[或单击]列标题,用户将看到一个文本框,用户将在其中输入新文本,一旦用户离开文本框,新列标题文本将设置为列的HeaderText属性。这能实现吗?任何人都可以共享示例代码来实现相同的功能吗?我将非常感谢你。任何帮助都是值得的

这是我的网格

 <asp:GridView ID="GdvTestData" runat="server" 
        class="table table-striped table-responsive table-hover" 
        onrowdatabound="gv_RowDataBound" 
        PageSize="100" OnSelectedIndexChanged="GdvTestData_SelectedIndexChanged">
                <FooterStyle BorderStyle="Solid" />
</asp:GridView>

下面是将alias与列绑定的方法 下面是aspx代码

<asp:DropDownList runat="server" ID="ddlQuery">
            <asp:ListItem Text="Query1" Value="1" Selected="True"></asp:ListItem>
            <asp:ListItem Text="Query2" Value="2"></asp:ListItem>
            <asp:ListItem Text="Query3" Value="3"></asp:ListItem>
        </asp:DropDownList>
        <asp:TextBox runat="server" ID="txtAlias"></asp:TextBox>
        <asp:Button runat="server" ID="btnGetData" Text="GetData" OnClick="btnGetData_Click" />
        <asp:GridView runat="server" ID="gcData"></asp:GridView>
下面是在cs中将数据绑定到网格的代码

protected void btnGetData_Click(object sender, EventArgs e)
        {
            GetData();
        }

        private void GetData()
        {
            SqlConnection con = new SqlConnection();
            con.ConnectionString = "Connection String";

            string Query = string.Empty;
            if (ddlQuery.SelectedValue == "1")
                Query = "SELECT * FROM Table1";
            else if (ddlQuery.SelectedValue == "2")
                Query = "SELECT * FROM Table2";
            else if (ddlQuery.SelectedValue == "3")
                Query = "SELECT * FROM Table3";

            try
            {
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandText = Query;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);

                DataTable dtFinal = new DataTable();
                foreach (DataColumn cln in dt.Columns)
                {
                    dtFinal.Columns.Add(cln.ColumnName + " " + txtAlias.Text, cln.DataType);
                }
                foreach (DataRow row in dt.Rows)
                {
                    DataRow dr = dtFinal.NewRow();
                    for (int i = 0; i < dtFinal.Columns.Count; i++)
                    {                       
                        dr[i] = row[i];                        
                    }
                    dtFinal.Rows.Add(dr);
                }
                gcData.DataSource = dtFinal;
                gcData.DataBind();
            }
            catch (Exception)
            {
                throw;
            }

        }

在这里,您需要为每一列指定别名,例如从表中选择department作为[dept],customerid作为[id]。应该从表中选择department作为[deptGrid1],customerid作为[idFGrid1]。我不知道列名,因为用户在运行时选择了表。我正在从表名中选择*。现在,我需要允许用户为列指定别名,并使用别名显示表,并且您只希望在网格标题名称处显示该别名,对吗?是的…GridView不是数据源边界,您在这里执行的操作有许多危险标志。首先是允许最终用户决定要查看的表。这是一个迹象,表明有些东西设计得不好。这还意味着您必须以动态sql的形式运行所有内容,或者构建一个字符串并执行它。这为sql注入打开了大门。然后是select*,这当然是有意义的,因为您有一个可以显示任何内容的网格。您应该将您的连接和命令对象包装在USING语句中,以便将它们处理掉。为什么一个try catch会再次抛出错误?@SeanLange这只是一个演示代码我不知道这家伙是否使用过任何类库,但如果他们不知道更好的方法,这会破坏他们的连接池这是真的,即使允许用户提供别名也是不可取的,因为这也会导致sql注入不确定指定列标题的用户如何允许sql注入。