在查询执行时填充表字段

时间:2011-11-24 15:55:06

标签: asp.net gridview

我正在尝试构建一个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();

        }
    }

但是,这种方法永远不会被解雇。我可以在更改选择时看到请求,但在方法声明中设置断点什么都不做。

基于此,设置,我有三个相关的问题

  1. 我需要修改什么才能启动OnSelectionChanged事件处理程序?
  2. 如何在页面加载时将GridView区域更改为空?
  3. 如何将dataListings.DataBind()执行的结果发送到GridView中显示?

2 个答案:

答案 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)

回答1

为ListBox1设置AutoPostBack为true,如

<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True".... ></asp:ListBox>

回答2

在选择更改时,首先需要清除GridView中的数据,例如

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
  dataListings.DataSource = null;
  dataListings.DataSourceID = null;
  dataListings.DataBind();
  ........... // Other code goes here
}

回答3

从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每次都会使用查询中的新数据进行填充。