Как я могу проверить определенные флажки в сетке? - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть DataTable с примерно пятью (это число может отличаться) продуктами в нем (DataTable столбцами являются ProductID и ProductName).У меня также есть сетка с CheckBox в одном столбце и именем продукта после этого.

Мне нужно проверить CheckBox es, которые существуют в DataTable.Остальные значения CheckBox в сетке должны оставаться не проверенными.Я поместил следующий код в событие ItemDataBound, но он не работает.Все CheckBox не отмечены, хотя DataTable показывает пять продуктов.

dt = objProduct.GetProducts();

if (dt.Rows.Count > 0)
{
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        if (lblname.Text.ToString() == dt.Rows[i]["ProductName"].ToString())
        {
            CheckBox1.Checked = true;
        }
        else
        {
            if (CheckBox1.Checked != true)
            {
                CheckBox1.Checked = false;
            }
            else
            {
                CheckBox1.Checked = true;
            }
        }
    }
}

это разметка .aspx:

<telerik:GridTemplateColumn UniqueName="PName" Visible="false">
    <ItemTemplate>
        <asp:Label runat="server" ID="lblname" Text='<%#Eval("ProductName") %>'></asp:Label>
        <asp:Label runat="server" ID="lblProductID" Text='<%#Eval("ProductID") %>'></asp:Label>
    </ItemTemplate>
</telerik:GridTemplateColumn>

Ответы [ 2 ]

0 голосов
/ 09 декабря 2011

Упрощенным, на мой взгляд, является создание события OnPreRender для CheckBox, например:

<asp:TemplateField>
   <ItemTemplate>
     <asp:CheckBox ID="cbSelector" runat="server" OnPreRender="cbSelector_OnPreRender" />
   </ItemTemplate>
   <ItemStyle HorizontalAlign="Center" Width="25px" />
</asp:TemplateField>

Тогда в коде позади:

protected void cbSelector_OnPreRender(object sender, EventArgs e)
{
    MyRecord record = // Get your record for the row
    CheckBox cb = sender as CheckBox;
    cb.Checked = record.Checked;
}
0 голосов
/ 07 декабря 2011

Вам не нужно перебирать все строки внутри события itemdatabound. Аргумент ограничивает элементы управления и источник данных строкой, которая была только что связана.

Я думаю, вам нужно использовать событие ItemDataBound, как это, и установить оттуда флажки

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)           
{
     //.. this is your data item for the bound row
     GridDataItem item = (GridDataItem)e.Item;  
     string productName = item["ProductName"].ToString();

     //.. set check boxes in here              
     CheckBox myCheckBox = e.Item.FindControl["ckBoxId"] as CheckBox;

     //.. your logic to set check box based on datasource


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