我正在尝试构建一个ASP站点,该站点根据ListBox中的选择结果填充表。为了做到这一点,我在div元素中创建了一个GridView表。目前,默认行为是以可排序的顺序显示指定表中的所有项目。
但是,我想进一步改进这个以允许根据ListBox选择的结果显示匹配,但我不确定如何执行此操作。 ListBox将OnSelectionChanged
事件触发到下面定义的方法,GridView元素定义为
<asp:GridView ID="dataListings" runat="server" AllowSorting="True"
AutoGenerateColumns="False" DataSourceID="LinqDataSource1"
OnDataBinding="ListBox1_SelectedIndexChanged">
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int itemSelected = selectTopics.SelectedIndex;
string[] listing = null;
switch (itemSelected)//assign listing the array of course numbers
{
case 0:
break;
case 1:
listing = arts;
break;
case 2:
listing = currentEvents;
break;
.... More cases here
default:
listing = arts;
break;
}
using (OLLIDBDataContext odb = new OLLIDBDataContext())
{
var q =
from c in odb.tbl_CoursesAndWorkshops
where listing.Contains(c.tbl_Course_Description.tbl_CoursesAndWorkshops.course_workshop_number)
select c;
dataListings.DataSource = q;
dataListings.DataBind();
}
}
但是,这种方法永远不会被解雇。我可以在更改选择时看到请求,但在方法声明中设置断点什么都不做。
基于此,设置,我有三个相关的问题
OnSelectionChanged
事件处理程序?dataListings.DataBind()
执行的结果发送到GridView中显示? 答案 0 :(得分:1)
对于您的第一部分问题,请将AutoPostBack添加到列表框中:
<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True"...
第二部分(清除GridView)。您可能还想创建一个EmptyDataTemplate,以便看到某些内容。
GridView1.DataSource = null;
GridView1.DataSourceID = null;
GridView1.DataBind();
你可能有'向后':
OnDataBinding="ListBox1_SelectedIndexChanged">
当ListBox选择更改时,将数据源分配给gridview并在gridview上调用DataBind。
答案 1 :(得分:0)
为ListBox1设置AutoPostBack为true,如
<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True".... ></asp:ListBox>
在选择更改时,首先需要清除GridView中的数据,例如
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
dataListings.DataSource = null;
dataListings.DataSourceID = null;
dataListings.DataBind();
........... // Other code goes here
}
从GridView中获取OnDataBinding事件
<asp:GridView ID="dataListings" runat="server" AllowSorting="True"
AutoGenerateColumns="False" DataSourceID="LinqDataSource1" >
向ListBox1添加一个事件(onselectedindexchanged),看起来像
<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True"
onselectedindexchanged="ListBox1_SelectedIndexChanged"></asp:ListBox>
现在,在ListBox1_SelectedIndexChanged事件中,如果你在查询中有新数据来绑定GridView,那么它将绑定GridView,但是下面的更改将有很好的输出。
var q = ...; //Your query for getting data goes here.
dataListings.DataSource = q;
dataListings.DataSourceID = null;
dataListings.DataBind();
现在,GridView每次都会使用查询中的新数据进行填充。