Связанная проблема gridview; разрешение jquery в unbind? - PullRequest
1 голос
/ 07 декабря 2009

Добрый вечер всем.

У меня есть немного загадки для вас.

На моей странице есть каскадный ddl (ddlBuyer), поиск по текстовому полю (tbxProdAC) и список переключателей (radTopx). После их заполнения и нажатия кнопки отправки создается сетка с данными. Я пытаюсь добиться того, чтобы пользователь мог выбрать только ddl, текстовое поле или список радиокнопок в качестве метода для создания данных 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, нажмите кнопку, чтобы создать вид сетки (это происходит при обратной передаче).

</p> <p>protected void btnSubmit_Click(object sender, EventArgs e) {</p> <pre><code> 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 очищается, но представление сетки сохраняется, так как запускается следующее:

</p> <p>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);</p> <pre><code> ddlSub.DataSource = queryII; ddlSub.DataTextField = "UnitUserfield2"; ddlSub.DataValueField = "UnitUserfield2"; ddlSub.DataBind(); ddlSub.Items.Insert(0, "--Choose Sub Category--"); GridView1.DataSourceID = null;

Есть ли способ «отсоединить» вид сетки через jquery, чтобы при нажатии ddlBuyer вид сетки высвобождал любые данные, которые он мог ранее хранить?

Извинения, если это не имеет смысла, это довольно сложно описать кратко и точно.

1 Ответ

0 голосов
/ 08 декабря 2009

Звучит интересно, мистер Дин. У меня был подобный опыт, пытаясь отменить привязку событий, которые ранее были связаны чем-то другим, и это может быть чем-то вроде лапши. Не видя примера того, как выглядят ваши элементы (как 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-код страницы, которой вы пытаетесь манипулировать, и я посмотрю.

Надеюсь, это поможет!

Приветствия

Иэн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...