dsCustomers라는 데이터 집합을 사용하는 작업 표가 있습니다. gridview (키 누름 검색시)를 검색 할 수 있도록 변경하려고합니다. sqlDataReader를 사용하여 채워진 DataTable을 사용하여 검색 프로세스를 수행했습니다 (연결을 만든 다음 SQL SELECT를 실행). 그러나 sqlDataReader는 외부 소스 (데이터베이스 외부)로부터 채워지는 일부 데이터가 있기 때문에 원하는 모든 데이터 필드를 제공하지 않습니다. 따라서 DataTable에 dsCustomers 데이터 집합을 채워야합니다.C에서 데이터 집합을 사용하여 datatable을로드하는 방법 #
<%@ Page Language="C#" MasterPageFile="~/Master.master" AutoEventWireup="true" Inherits="Customers" Title="Customers" Codebehind="Customers.aspx.cs" EnableEventValidation="false"%>
<%@ Register assembly="System.Web.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" namespace="System.Web.UI.WebControls" tagprefix="asp" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient"%>
<asp:Content ID="cntMain" ContentPlaceHolderID="plcMainBody" runat="Server">
<script runat="server">
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ToString());
SqlCommand cmd = new SqlCommand();
DataView dv = new DataView();
DataTable dt = new DataTable();
DataTable dtsort = new DataTable();
private DataTable DataTable
{
get { return (DataTable)Session["DataTable"]; }
set { Session["DataTable"] = value; }
}
private DataView DataView
{
get { return (DataView)Session["DataView"]; }
set { Session["DataView"] = value; }
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!this.IsPostBack)
{
DataTable dt;
if (this.DataTable == null)
LoadDataToTable();
else dt = this.DataTable;
this.txtNumber.Attributes.Add("onkeyup", string.Format("javascript:__doPostBack('{0}','')", this.upnlGridView.ClientID));
}
else
{
string target = this.Request.Form["__EVENTTARGET"];
if (!string.IsNullOrEmpty(target) && target.Equals(this.upnlGridView.ClientID))
{
if (!string.IsNullOrEmpty(this.txtNumber.Text))
{
Filter();
}
else
{
this.grvItems.DataSource = this.DataTable;
this.grvItems.DataBind();
}
}
}
}
private void Filter()
{
if (!string.IsNullOrEmpty(this.txtNumber.Text))
{
DataRow[] rows = this.DataTable.Select(string.Format("ID LIKE '%{0}%'", this.txtNumber.Text));
this.grvItems.DataSource = this.LoadData(rows);
this.grvItems.DataBind();
}
}
private void LoadDataToTable()
{
// con.Open();
// cmd.Connection = con;
// cmd.CommandText = "select * from Users"; --I NEED TO USE THE DATASET // RETURN HERE (dsCustomers)
// cmd.CommandType = System.Data.CommandType.Text;
//
// SqlDataAdapter adapter = new SqlDataAdapter(cmd);
// DataSet dsCustomers = new DataSet();
// adapter.Fill(dsCustomers);
this.grvItems.DataSource = dsCustomers;
// this.grvItems.DataBind();
Session["DataTable"] = dt;
}
protected void PageIndexChanging(object sender, GridViewPageEventArgs e)
{
}
protected void Sorting(object sender, GridViewSortEventArgs e)
{
BindData(e.SortExpression);
}
private void BindData(string sortExpression)
{
// reset the dataview, else it will be undefined value!
dv = (DataView)Session["DataView"];
if (sortExpression.Length > 0)
{
dv.Sort = sortExpression;
// save the dataview in stateless environment
Session["DataView"] = dv;
}
this.grvItems.DataSource = dv;
this.grvItems.DataBind();
}
private DataTable LoadData()
{
return this.LoadData(null);
}
private DataTable LoadData(DataRow[] rows)
{
DataTable dt = this.GetTable();
if (rows != null)
{
foreach (DataRow r in rows)
{
dt.Rows.Add(r[0], r[1]);
}
}
dv = dt.DefaultView;
Session["DataView"] = dv;
return dt;
}
private DataTable GetTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID", String.Empty.GetType());
dt.Columns.Add("Role", String.Empty.GetType());
return dt;
}
</script>
</head>
<body>
<asp:ScriptManager runat="server" ID="PageScriptManager" />
Search EID:
<asp:TextBox runat="server" ID="txtNumber" AutoPostBack="true" />
<asp:UpdatePanel runat="server" ID="upnlGridView">
<ContentTemplate>
<hr />
<asp:GridView runat="server" ID="grvItems" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" PageSize="20" OnRowEditing="grvItems_RowEditing"
ShowFooter="True" OnRowCommand="grvItems_RowCommand"
OnRowCreated="grvItems_RowCreated" OnRowDeleted="grvItems_RowDeleted"
CellPadding="5" DataSourceID="dsCustomers">
<AlternatingRowStyle CssClass="DataGridAlternate" />
<RowStyle CssClass="DataGridItemStyle" />
<HeaderStyle CssClass="Header"></HeaderStyle>
<FooterStyle CssClass="DataGridAlternate"></FooterStyle>
<Columns>
<asp:TemplateField>
<HeaderStyle HorizontalAlign="Center" Width="40px" VerticalAlign="Middle" />
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:ImageButton runat="server" ImageUrl="images/icon-pencil.gif" AlternateText="Edit"
CommandName="Edit" CausesValidation="False" ID="btnEdit"></asp:ImageButton>
<asp:ImageButton runat="server" ImageUrl="images/icon-delete.gif" AlternateText="Delete"
CommandName="Delete" CausesValidation="False" ID="btnDelete" OnClientClick="return confirm('Are you sure you want to delete?');">
</asp:ImageButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
<asp:BoundField DataField="Role" HeaderText="Role" SortExpression="Role" />
<asp:BoundField DataField="FirstName" HeaderText="First Name" SortExpression="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="Last Name" SortExpression="LastName" />
<asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
<asp:BoundField DataField="PhoneNumber" HeaderText="Phone Number" SortExpression="PhoneNumber" />
<asp:BoundField DataField="LOCATION" HeaderText="Location" SortExpression="dsCustomers" />
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
<table width="100%">
<tr>
<td width="10%"> </td>
<td align="left">
<asp:Label ID="lblMessage" runat="server" Text="" CssClass="error"></asp:Label>
</td>
</tr>
</td>
</tr>
</table>
<asp:ObjectDataSource ID="dsCustomers" runat="server" SelectMethod="GetDataDictionary"
TypeName="DataObjects.dsCustomers " InsertMethod="AddUpdate"
UpdateMethod="AddUpdate" DeleteMethod="Delete">
<SelectParameters>
<asp:Parameter Name="ID" Type="String" ConvertEmptyStringToNull="False" DefaultValue="ALL" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="ID" Type="String" />
<asp:Parameter Name="Role" Type="String" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="ID" Type="String" />
<asp:Parameter Name="Role" Type="String" />
</InsertParameters>
<DeleteParameters>
<asp:Parameter Name="EID" Type="String" />
</DeleteParameters>
</asp:ObjectDataSource>
</asp:Content>
누군가가이 작업을 수행하는 방법에 대한 몇 가지 지침이나 방향을 제시하시기 바랍니다 수 :
여기에 전체 코드는? 감사
이 오류는 GridView의 데이터 소스에서'DataSet'을 (를) 캐스팅하지 않고 가져 오는 중임을 나타냅니다. 사용 :'dsCustomers = DataSet으로서의 grvItems.DataSource; – Habib
@Habib : 그들은 현재 DataTable을 사용하고있는 것을 제외하고 ... 캐스트가 실패합니다. 그들은'DataSet'을로드하기 위해'SqlDataAdapter'를 사용해야합니다. –
@TrueBlueAussie, 내가 틀린 질문을 읽을 수도 있겠지만, 현재 코드는 기존 Gridview 또는 * something *에서 'DataSet'을 사용하여 변경해야한다고 생각합니다. 그것은 OP까지입니다. – Habib