【问题标题】:C# Datatable column name changing issueC# Datatable 列名更改问题
【发布时间】:2017-09-14 19:53:17
【问题描述】:

这是我在这里的第一篇文章,我是编程新手。现在,我正在尝试更改从 sql 数据库中获取数据的 DataTable 中的列名。在我使用 foreach 循环更改列名之后,似乎在我更改数据表的列名之后,程序在我将其绑定到 gridview 后立即崩溃。 the error occur

知道是什么导致了错误吗?

后面的C#代码:

//custom query generator
Session["query"] = db.generate_query(parameter1, parameter2, parameter3, parameter4);
//connecting sql
SqlConnection conn = new SqlConnection("Data Source=USER-PC;Initial Catalog=ISMS;Integrated Security=True");
SqlCommand cmd1 = new SqlCommand(Session["query"].ToString(),conn);
SqlDataAdapter sdal = new SqlDataAdapter(cmd1);


//when search is needed
dt_table = new DataTable();
sdal.Fill(dt_table);
// dataTable.Columns["ExistingColumnName"].ColumnName = "regnum";
//renaming column in datatable

foreach (DataColumn dtclm in dt_table.Columns) {
    dt_table.Columns[dtclm.ToString()].ColumnName = dt_table.Columns[dtclm.ToString()].ColumnName.ToString().Replace("_"," ");

}

staff_attendance_gridview.Visible = true;
staff_attendance_gridview.DataSource = dt_table;
staff_attendance_gridview.DataBind();
result_message.Text = dt_table.Rows.Count.ToString() + " rows in the table";

aspx 文件:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="admin_attendance_.aspx.cs" Inherits="ISMS.admin_attendance" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<!--start container box-->
<div id="container_box">  
<div id="text">
<asp:Label runat="server" ID="welcome_message" /><br />
<br />
<!--search bar-->
<p>
<br />
    Employee ID: <asp:TextBox runat="server" ID="employee_search" Text="" /><br />
    <br />
    Attendance ID: <asp:TextBox runat="server" ID="attendance_ID_text_box" Text="" /><br />
    <br />
    fill up both attendance ID and Employee ID and click delete to delete certain record.<br />
    <br />
<asp:Button ID="search_btn" runat="server" Text="search" OnClick="search_btn_Click" />
<asp:Button ID="clock_in_or_out_btn" runat="server" Text="clock in/out" OnClick="clock_in_or_out_btn_Click" />
<asp:Button ID="delete_button" runat="server" Text="delete" OnClick="delete_button_Click" />
    <br />
</p>
<!--gridview-->
   <hr />
    <br />
<div id="gridview">
<asp:GridView runat="server" ID="staff_attendance_gridview" OnPageIndexChanging="gridview_PageIndexChanging" AutoGenerateColumns="true" DataKeyNames="Attendance_id" >
</asp:GridView>



</div>
<!--end gridview-->
<p>
<!--validator-->
<asp:RegularExpressionValidator ID="employee_search_validator" runat="server"     
ErrorMessage="Invalid searching citeria. Only exactly 8 numbers is allowed." 
ControlToValidate="employee_search"
 ValidationExpression="^[0-9]{8}$" /><br />
<br />
</p>
<br />
<!--hyperlink to main menu-->
<asp:Label runat="server" ID="result_message" /><br />
<a href="admin.aspx" >Main menu</a>
</div>    
</div>
<!--end container box-->
</asp:Content>

Database table structure

【问题讨论】:

  • 您应该避免使用DataTable,并学习如何正确处理IDisposable
  • 好的。第一次听说IDisposable Interface,学习一下
  • 为什么将查询存储在会话中?

标签: c# asp.net data-binding columnname datacolumn


【解决方案1】:

您的 GridView 中有一个属性引用列 Attendance_id。这必须与您的列的更新名称 Attendance id 匹配。

我已更正您的以下代码以正确处理 IDisposable 并删除过于复杂的位。

Session["query"] = db.generate_query(parameter1, parameter2, parameter3, parameter4);

using(SqlConnection conn = new SqlConnection("Data Source=USER-PC;Initial Catalog=ISMS;Integrated Security=True"))
{
    using(SqlCommand cmd1 = new SqlCommand(Session["query"].ToString(), conn))
    {
        using(SqlDataAdapter sdal = new SqlDataAdapter(cmd1))
        {
            dt_table = new DataTable();
            sdal.Fill(dt_table);
        }
    }
}

foreach (DataColumn column in dt_table.Columns)
{
    column.ColumnName = column.ColumnName.Replace("_", " " );
}

staff_attendance_gridview.Visible = true;
staff_attendance_gridview.DataSource = dt_table;
staff_attendance_gridview.DataBind();
result_message.Text = dt_table.Rows.Count + " rows in the table";

【讨论】:

  • @moja 如果您在某些内容引用您之前重命名的内容时遇到错误,请帮自己一个忙,对旧值进行文本搜索,看看它是否在其他任何地方引用。
  • 好的,如果重命名后出现错误,将搜索旧值文本。感谢您的建议
猜你喜欢
  • 2014-09-24
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
相关资源
最近更新 更多