RadGrid 由网格外的 RadComboBox 过滤
RadGrid filtering by the RadComboBox which is outside the grid
我尝试使用此代码从位于 Grid 外部的外部 radcombox 过滤 radgrid。我对此有疑问。 Visual Studio 调试器和 SQL 分析器显示此代码有效,并使用正确的过滤器值将正确的过滤器表达式发送到 radgrid。但是 radgrid 在重新绑定时不会使用此表达式过滤数据。重新绑定后,它显示所有数据,没有任何过滤。我该如何解决?这是我的代码 C#:
protected void RadComboBox1_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
radgrid.MasterTableView.FilterExpression = "[service_id] LIKE '%" + ddlService.SelectedValue + "%' ";
GridColumn column = radgrid.MasterTableView.GetColumnSafe("serv_id");
column.CurrentFilterFunction = GridKnownFunction.EqualTo;
column.CurrentFilterValue = ddlService.SelectedValue;
column.AndCurrentFilterFunction = GridKnownFunction.EqualTo;
radgrid.MasterTableView.Rebind();
}
这是我的带有组合框设置的 ASPX 代码:
<telerik:RadComboBox ID="ddlService" runat="server" Height="200" Width="240"
DropDownWidth="310" DataSourceID="dsServices"
EmptyMessage="- Select Product -"
HighlightTemplatedItems="true" CausesValidation="false"
Filter="Contains" AppendDataBoundItems="true"
onselectedindexchanged="RadComboBox1_SelectedIndexChanged"
SelectedValue='<%# radgrid.MasterTableView.GetColumn("serv_id").CurrentFilterValue %>'
AllowCustomText="true" AutoPostBack="true" DataTextField="service_name" DataValueField="id"
>
您必须自定义以下代码以满足您的要求。我在这里给了你一个方法。
在我的例子中,我需要将名称列表从组合框中添加到网格中。
名称存储在 emp table 中。网格的数据存储在联系人 table 中。当我 select 输入姓名并点击添加时,emp 姓名被添加为联系人。
以下是我的aspx。
<telerik:RadComboBox runat="server" ID="comboNames" SelectMethod="getContactName"
DataTextField="name" DataValueField="id"
EnableCheckAllItemsCheckBox="true" CheckedItemsTexts="FitInInput" CheckBoxes="true" Width="100%">
</telerik:RadComboBox>
<telerik:RadButton runat="server" ID="btnAdd" OnClick="btnAdd_Click" Text="Add"></telerik:RadButton>
<telerik:RadGrid runat="server" ID="gridContacts" Width="100%" AutoGenerateColumns="false"
AllowSorting="true" AllowMultiRowSelection="false" AllowPaging="true" PageSize="20"
GridLines="None" ShowGroupPanel="true">
<PagerStyle Mode="NextPrevNumericAndAdvanced" />
<MasterTableView Width="100%" DataKeyNames="cont_id" AllowMultiColumnSorting="true"
CommandItemDisplay="Top"
GroupLoadMode="Server" NoMasterRecordsText="No persons saved">
<CommandItemSettings AddNewRecordText="Add New"
SaveChangesText="Save Contacts"
ShowSaveChangesButton="false"
CancelChangesText="Cancel Changes"
ShowCancelChangesButton="false"
ShowExportToCsvButton="false" ShowExportToExcelButton="false" ShowExportToPdfButton="false" ShowExportToWordButton="false" />
<Columns>
<telerik:GridTemplateColumn HeaderText="Name" SortExpression="name" UniqueName="name">
<ItemTemplate>
<asp:Label runat="server" ID="lblContName" Text='<%# Eval("name") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<telerik:RadTextBox runat="server" ID="txtContName"></telerik:RadTextBox>
</EditItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
在 C# 代码中执行此操作。
protected void btnAdd_Click(object sender, EventArgs e)
{
try
{
foreach (RadComboBoxItem item in comboNames.CheckedItems)
{
int contID = Convert.ToInt32(item.Value);
tbl_contacts cont = db.tbl_contacts
.Where(c => c.cont_id == contID)
.FirstOrDefault();
cont.cont = true;
db.SaveChanges();
}
gridContacts.Rebind();
}
catch (Exception ex)
{
//Add your exception logic here
}
}
为您的网格添加一个需要的数据源。
protected void gridContacts_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
gridContacts.DataSource = db.tbl_contacts
.Where(c => c.is_cont == true)
.ToList();
}
我尝试使用此代码从位于 Grid 外部的外部 radcombox 过滤 radgrid。我对此有疑问。 Visual Studio 调试器和 SQL 分析器显示此代码有效,并使用正确的过滤器值将正确的过滤器表达式发送到 radgrid。但是 radgrid 在重新绑定时不会使用此表达式过滤数据。重新绑定后,它显示所有数据,没有任何过滤。我该如何解决?这是我的代码 C#:
protected void RadComboBox1_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
radgrid.MasterTableView.FilterExpression = "[service_id] LIKE '%" + ddlService.SelectedValue + "%' ";
GridColumn column = radgrid.MasterTableView.GetColumnSafe("serv_id");
column.CurrentFilterFunction = GridKnownFunction.EqualTo;
column.CurrentFilterValue = ddlService.SelectedValue;
column.AndCurrentFilterFunction = GridKnownFunction.EqualTo;
radgrid.MasterTableView.Rebind();
}
这是我的带有组合框设置的 ASPX 代码:
<telerik:RadComboBox ID="ddlService" runat="server" Height="200" Width="240"
DropDownWidth="310" DataSourceID="dsServices"
EmptyMessage="- Select Product -"
HighlightTemplatedItems="true" CausesValidation="false"
Filter="Contains" AppendDataBoundItems="true"
onselectedindexchanged="RadComboBox1_SelectedIndexChanged"
SelectedValue='<%# radgrid.MasterTableView.GetColumn("serv_id").CurrentFilterValue %>'
AllowCustomText="true" AutoPostBack="true" DataTextField="service_name" DataValueField="id"
>
您必须自定义以下代码以满足您的要求。我在这里给了你一个方法。
在我的例子中,我需要将名称列表从组合框中添加到网格中。
名称存储在 emp table 中。网格的数据存储在联系人 table 中。当我 select 输入姓名并点击添加时,emp 姓名被添加为联系人。
以下是我的aspx。
<telerik:RadComboBox runat="server" ID="comboNames" SelectMethod="getContactName"
DataTextField="name" DataValueField="id"
EnableCheckAllItemsCheckBox="true" CheckedItemsTexts="FitInInput" CheckBoxes="true" Width="100%">
</telerik:RadComboBox>
<telerik:RadButton runat="server" ID="btnAdd" OnClick="btnAdd_Click" Text="Add"></telerik:RadButton>
<telerik:RadGrid runat="server" ID="gridContacts" Width="100%" AutoGenerateColumns="false"
AllowSorting="true" AllowMultiRowSelection="false" AllowPaging="true" PageSize="20"
GridLines="None" ShowGroupPanel="true">
<PagerStyle Mode="NextPrevNumericAndAdvanced" />
<MasterTableView Width="100%" DataKeyNames="cont_id" AllowMultiColumnSorting="true"
CommandItemDisplay="Top"
GroupLoadMode="Server" NoMasterRecordsText="No persons saved">
<CommandItemSettings AddNewRecordText="Add New"
SaveChangesText="Save Contacts"
ShowSaveChangesButton="false"
CancelChangesText="Cancel Changes"
ShowCancelChangesButton="false"
ShowExportToCsvButton="false" ShowExportToExcelButton="false" ShowExportToPdfButton="false" ShowExportToWordButton="false" />
<Columns>
<telerik:GridTemplateColumn HeaderText="Name" SortExpression="name" UniqueName="name">
<ItemTemplate>
<asp:Label runat="server" ID="lblContName" Text='<%# Eval("name") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<telerik:RadTextBox runat="server" ID="txtContName"></telerik:RadTextBox>
</EditItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
在 C# 代码中执行此操作。
protected void btnAdd_Click(object sender, EventArgs e)
{
try
{
foreach (RadComboBoxItem item in comboNames.CheckedItems)
{
int contID = Convert.ToInt32(item.Value);
tbl_contacts cont = db.tbl_contacts
.Where(c => c.cont_id == contID)
.FirstOrDefault();
cont.cont = true;
db.SaveChanges();
}
gridContacts.Rebind();
}
catch (Exception ex)
{
//Add your exception logic here
}
}
为您的网格添加一个需要的数据源。
protected void gridContacts_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
gridContacts.DataSource = db.tbl_contacts
.Where(c => c.is_cont == true)
.ToList();
}