2009-12-07 108 views
1

晚上好。绑定gridview问题; jQuery的解决方案在解除绑定?

我对你有点疑惑。

在我的页面上,我有一个级联ddl(ddlBuyer),一个文本框搜索(tbxProdAC)和一个单选按钮列表(radTopx)。这些,一旦填充,并点击一个提交按钮,产生一个gridview填充数据。我想实现的是,用户只能选择ddl,文本框或单选按钮列表作为生成gridview数据的方法。

例如,我已经通过编写一些基本上“清除”gridview并重置不同搜索方法的jQuery语法来实现这一目标。

<code> 
    ddlBuyer.Attributes.Add("onclick", 
    "$('#tbxProdAC').val(''); 
    $('#txtbxHowMany').val(''); 
    $('#GridView1').remove(); 
    $('#radTopx input').attr('checked',false); 
    $('#radProd').attr('checked', false);"); 
</code> 

但是,因为这是发生客户端,服务器端的事件(即ddlBuyer_SelectedIndexChanged)仍在执行,随后,该数据被绑定的时候我真的不希望它。即如果我选择了radtopx按钮,请单击该按钮以生成gridview(这发生在回发)。

protected void btnSubmit_Click(object sender, EventArgs e) {

if (radTopx.SelectedValue == "" || txtbxHowMany.Text == "") 
    { 
     MessageBox.Show("Please Ensure that BOTH 'The Number of Products' and Appropriate material Is selected Before You Attempt To Run a TOP x Report", "Top x Error!!!", 
      MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
     GridView1.DataSourceID = null; 
    } 

    else 
    { 
     int max = 0; 
     if (int.TryParse(txtbxHowMany.Text, out max)) 
     { 

      GridView1.DataSource = this.GetMaterialData(Session["MemberKey"].ToString(), radTopx.SelectedItem.Value, "Primary", max); 
      GridView1.DataSourceID = String.Empty; 
      GridView1.DataBind(); 
     } 
    } 

然后我点击ddlBuyer,该radTopx信息被清除,但在GridView保持为被触发如下:

rotected void ddlBuyer_SelectedIndexChanged(object sender, EventArgs e) { ORDataClassesDataContext dbII = new ORDataClassesDataContext(); var queryII = (from r in dbII.tblOnlineReportingFINALPRODUCTs where r.UnitUserfield1 == ddlBuyer.SelectedValue select new { UnitUserfield2 = r.UnitUserfield2 }).Distinct().OrderBy(r => r.UnitUserfield2);

ddlSub.DataSource = queryII; 
    ddlSub.DataTextField = "UnitUserfield2"; 
    ddlSub.DataValueField = "UnitUserfield2"; 
    ddlSub.DataBind(); 
    ddlSub.Items.Insert(0, "--Choose Sub Category--"); 

    GridView1.DataSourceID = null; 

有没有一种方式,以“解除绑定”网格通过jquery查看,以便当点击ddlBuyer时,gridview已经发布了它以前可能拥有的任何数据?

道歉,如果这没有意义,要简洁和准确地描述有点困难。

回答

0

听起来很有趣MrDean。我有过类似的经历,尝试解除先前受其他事物束缚的事件,并且可能会有点像抓刀。没有看到你的元素看起来像什么(如HTML)的例子,很难知道这些事件是如何绑定的。

如果它们通过简单填充每个元素的onclick属性来绑定,则这个属性很容易撤消。

$('.myElement').attr('onclick', ''); //Empty out the onclick attribute 
$('.myElement').bind('click', function(){ ... }); //Bind your own function to the click event 

你会发现使用DOM绑定你的函数,而不是操纵单个元素的属性是一个更好的主意。它更加灵活,你可以用它做更多的事情。

现在,如果您的原始函数使用DOM方法绑定,而不是操纵onclick属性,那么事情会变得棘手。您可以尝试的第一件事是:

$('.myElement').unbind(); 

这将使jQuery解除绑定与给定元素相关联的所有事件。如果这变得棘手,就要搞清楚何时打电话给unbind()。如果你在ready上执行它,而另一个函数库在你的函数之后执行它的ready函数,那么你没有取得任何成就,因为事件还没有被绑定。

试试这个,让我知道你是如何去的。否则,请上传您尝试操作的网页的HTML,然后我们来看看。

希望这会有所帮助!

干杯

伊恩

+0

您好伊恩。非常感谢你的回复,并为我着想这个小小的场景。 我实际上设法欺骗了我的web应用程序......当用户选择下拉菜单,文本框或单选按钮列表时,发送回发。 因此,我只是做了一个警察,并将gridview绑定到null数据源。因此,当页面刷新时,gridview中不会出现任何内容。一个很好的小骗子! 但是,我会玩上述,因为它很有趣。 再次感谢您。 – MrDean 2009-12-08 09:09:51

+0

不用担心MrDean,感谢您的反馈:) – 2009-12-08 09:27:12

+0

我可能会回来给你Iain !!!这又让我生气了......使用我的作弊在我的gridview中导致排序/分页失败,所以我要给你一个方法。 – MrDean 2009-12-08 10:28:46