別の C# クラス ライブラリから Web コントロールを更新する必要があります。たとえば、グリッド データ ソースはクラス ライブラリから更新する必要があります。
WebForm1.aspx には、次のコードがあります
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>
<div>
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td>
<table>
<tr>
<td>Search</td>
<td>
<span>
<asp:TextBox ID="txtSearchBox" EnableTheming="false" AutoPostBack="True"
runat="server" ontextchanged="txtSearchBox_TextChanged" ></asp:TextBox>
</span>
<span>
<asp:Button ID="btnPre" runat="server" Text="<" CssClass="btnPrevious"
EnableTheming="false" onclick="btnPre_Click" />
</span>
<span>
<asp:TextBox ID="txtPage_Index" EnableTheming="false" CssClass="textboxTiny" AutoPostBack="True"
runat="server" ontextchanged="txtPage_Index_TextChanged" ></asp:TextBox></span>
<span>
<asp:Button ID="btnNext" runat="server" Text=">" CssClass="btnNext"
EnableTheming="false" onclick="btnNext_Click" />
</span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="3" style="margin-left: 40px">
<asp:GridView ID="grdSource" runat="server" class="grid" Width="100%"
AutoGenerateColumns="False" AllowPaging="true">
<Columns>
<asp:TemplateField>
<ItemStyle Width="20px" />
<ItemStyle />
<ItemTemplate>
<asp:CheckBox ID="chkSelectFeesType" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="name" HeaderText="Name"/>
</Columns>
<HeaderStyle CssClass="gridheader" />
<RowStyle CssClass="gridrow" />
</asp:GridView>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</div>
</form>
コードビハインドで
public partial class WebForm1 : System.Web.UI.Page
{
BO.Search search = new Search();
List<Employee> employees = new List<Employee>();
System.Web.UI.Page page = System.Web.HttpContext.Current.Handler as
System.Web.UI.Page;
protected void Page_Load(object sender, EventArgs e)
{
System.Web.UI.Page page = System.Web.HttpContext.Current.Handler as System.Web.UI.Page;
employees.Add(new BO.Employee("AAA", 01));
employees.Add(new BO.Employee("BBB", 02));
employees.Add(new BO.Employee("CCC", 03));
employees.Add(new BO.Employee("DDD", 04));
employees.Add(new BO.Employee("EEE", 05));
}
protected void btnPre_Click(object sender, EventArgs e)
{
search.PageSearch(ref grdSource, employees, ref page);
}
protected void txtPageIndex_TextChanged(object sender, EventArgs e)
{
search.PageSearch(ref grdSource, employees, ref page);
}
protected void btnNext_Click(object sender, EventArgs e)
{
search.PageSearch(ref grdSource, employees, ref page);
}
}
クラス Library クラス Search.cs 内
public class Search
{
public void PageSearch<T>(ref GridView grdSource, List<T> list, ref Page page)
{
TextBox txtSearchBox = (TextBox)page.FindControl("txtSearchBox");
TextBox txtPage_Index = (TextBox)page.FindControl("txtPage_Index");
if (grdSource.PageIndex > 0)
{
if (txtSearchBox.Text.Length > 0)
{
grdSource.DataSource = list.FindAll(i => i.Equals(txtSearchBox.Text.ToUpper()));
}
else
{
grdSource.DataSource = list;
}
grdSource.PageIndex = grdSource.PageIndex - 1;
}
grdSource.DataSource = list;
grdSource.DataBind();
txtPage_Index.Text = grdSource.PageIndex.ToString();
}
}
複数のフォームで同じ検索機能とページング機能を使用しています。そこで、すべてのページで機能する PageSearch() 関数を作成しました。しかし、問題は、search.cs クラスからグリッド ビューまたはテキスト ボックスの値をバインドできないことです。