2009-12-07 107 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