2013-12-20 6 views
0

У меня есть ретранслятор asp и его DataSource - это DataTable (с данными из базы данных). При первой загрузке страницы DataTable заполняется из db, а затем его данные привязываются к Repeater. Затем я помещал DataTable в ViewState, а при обратной передаче я использую DataTable из ViewState, затем он позволяет мне вводить данные в базу данных только после того, как пользователь выполнил все.Repeater, datatable и флажок включить/отключить

Некоторые строки могут быть добавлены в ретранслятор (путем добавления к DataTable в viewstate и последующего связывания).

Вот код повторителя:

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:HiddenField ID="HdfHiddenRow" ClientIDMode="Static" runat="server" /> 
     <asp:HiddenField ID="HdfHiddenId" ClientIDMode="Static" runat="server" /> 
     <div style="display:none;"> 
      <asp:Button ID="BtnHiddenButton" runat="server" Text="" OnClick="BtnHiddenButton_Click" /> 
     </div> 
     <table id="TableEI" style="width: 800px; margin-left:50px;" cellpadding="0" cellspacing="0"> 
      <asp:Repeater ID="Repeat_EffetsIndes" runat="server" OnItemDataBound="Repeat_EffetsIndes_ItemDataBound" > 
       <ItemTemplate> 
        <tr> 
         <td style="width: 431px;"> 
          <asp:Label ID="LblEI" runat="server" /> 
         </td> 
         <td class="auto-style1"> 
          <asp:CheckBox ID="CheckOui" ClientIDMode="Static" runat="server" Text="Yes" onclick="CheckedLine(this)" /> 
         </td> 
         <td> 
          <asp:CheckBox ID="CheckOui1" ClientIDMode="Static" runat="server" Enabled="false" Text="some text1" /> 
          <br /> 
          <asp:CheckBox ID="CheckOui2" ClientIDMode="Static" runat="server" Enabled="false" Text="some text2" /> 
          <br /> 
          <asp:CheckBox ID="CheckOui3" ClientIDMode="Static" runat="server" Enabled="false" Text="some text3" /> 
         </td> 
        </tr> 
       </ItemTemplate> 
      </asp:Repeater> 
     </table> 
..... 
[textbox + button to add new row there] 
..... 
    </ContentTemplate> 
</asp:UpdatePanel> 

Проверьте пример строки из моего Repeater:

http://img4.hostingpics.net/pics/356954example.png

Когда первый флажок (Да) в chcked: она позволяет 3 право флажки. (это было сделано благодаря javascript)

Я должен был предоставить уникальный идентификатор моим 4-мя галочками в каждой строке и определить, какие флажки должны быть включены, когда родительский флажок установлен. Я даю уникальный идентификатор события ItemDataBound ретранслятора.

protected void Repeat_EffetsIndes_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     DataRowView drv = e.Item.DataItem as DataRowView; 
     ((Label)e.Item.FindControl("LblEI")).Text = drv["Suivi_EffetsIndes_Label"].ToString(); 

     CheckBox ParentCheckBox = ((CheckBox)e.Item.FindControl("CheckOui")); 
     CheckBox ChildCheckBox1 = ((CheckBox)e.Item.FindControl("CheckOui1")); 
     CheckBox ChildCheckBox2 = ((CheckBox)e.Item.FindControl("CheckOui2")); 
     CheckBox ChildCheckBox3 = ((CheckBox)e.Item.FindControl("CheckOui3")); 

     string _IdPrefix = Guid.NewGuid().ToString().Replace("-", ""); 

     // Affectation d'un ID unique à chaque checkbox "Oui" 
     ParentCheckBox.ID = _IdPrefix; 
     // Concaténation de l'ID de la checkbox parent (Oui) et d'un chiffre pour identifier les checkboxes. 
     ChildCheckBox1.ID = _IdPrefix + "1"; 
     ChildCheckBox2.ID = _IdPrefix + "2"; 
     ChildCheckBox3.ID = _IdPrefix + "3"; 
    } 

Проблема

Когда один из правильных флажков 3 проверяется, я хотел бы, чтобы сразу обновить правильное значение в ViewState DataTable (комплект поле «проверено» от 0 до 1).

Проблема в том, что у меня есть некоторые проблемы, чтобы поймать флажки «CheckedChanged», не знаю, почему, а также «ID» флажков, как представляется, всегда имеет значение по умолчанию, поэтому я могу их найти например, написав «Repeater.Items [x] .FindControl (« CheckOui1 »), и это не должно быть возможным, потому что я даю им новый идентификатор, и именно благодаря этому я хотел бы найти, какой флажок проверены.

(извинения за мое не безупречный английское написание)

ответ

0

Единственной проблемой, которую я вижу в вашем коде является тем фактом, что вы используете GUID установить идентификатор Флажков и что это неправильно, потому что каждый раз, когда вы повторно привязать т epeater или обновить страницу, идентификатор будет совершенно другим.

Так что я советую вам сделать следующие шаги:

  1. Удалить ClientIDMode свойство из ваших флажков. Таким образом, ваш идентификатор checkboxes на HTML будет примерно таким: Repeat_EffectsIndes_CheckOui_0 (вы можете идентифицировать каждый уникальный идентификатор с помощью Firebug или опции вашего браузера Inspect Element).

  2. На Javascript проверьте, у кого установлен флажок, получить идентификатор и включить другие 3 флажка (то же, что вы уже сделали, я полагаю). Идентификатор остальных 3 флажков будет равен Repeat_EffectsIndes_CheckOui_0_CheckOui1 (для остального то же самое, кроме последнего номера), 0 (ноль) является индексом строки.

  3. И наконец, на вашей странице с кодом, используйте Repeater.Items[x].FindControl("<CheckBoxID>"), где <CheckBoxID> - это идентификатор элемента управления.

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

+0

Большое спасибо candeias, что решило мою проблему! Не знаю, почему я не обратил внимания на то, что GUID вызвал большие проблемы, например, если я был слепым: p –

Смежные вопросы