[英]C# Datatable column name changing issue
這是我在這里的第一篇文章,我是編程的新手。 現在,我試圖更改從SQL數據庫中獲取數據的DataTable中的列名。 使用foreach循環更改列名稱后,似乎在更改數據表的列名稱后,將其綁定到gridview之后,程序立即崩潰。 錯誤發生
知道導致錯誤的原因是什么?
后面的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>
您的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";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.