если флажок заголовка установлен, то все остальные флажки должны быть отмечены в виде сетки - PullRequest
0 голосов
/ 09 февраля 2012

Я использовал этот код ниже, но он не работает .. если я выбрал флажок заголовка, тогда все остальные флажки должны выбрать и как получить конкретный идентификатор строки, если флажок установлен.

protected void headerLevelCheckBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox headerChkBox = ((CheckBox)gvApproach.HeaderRow.FindControl("headerLevelCheckBox"));

    if (headerChkBox.Checked == true)
    {
        foreach(GridViewRow gvRow in gvApproach.Rows)
        {
            CheckBox rowChkBox = ((CheckBox)gvRow.FindControl("rowLevelCheckBox"));

            rowChkBox.Checked = true;//((CheckBox)sender).Checked;       
        }
    }
    else
    {
        foreach (GridViewRow gvRow in gvApproach.Rows)
        {
            CheckBox rowChkBox = ((CheckBox)gvRow.FindControl("rowLevelCheckBox"));
            rowChkBox.Checked = false;
        }
    }        
}

я использую против 2008, c #

без использования JavaScript ..

Ответы [ 4 ]

3 голосов
/ 10 февраля 2012

код aspx ... и чтобы получить идентификатор конкретного ROW IN GRID VIEW, я использовал контроль labe как PhotoId (PK)

<asp:GridView ID="gvApproach"  runat="server"  CellPadding="4" AutoGenerateColumns="False" 
        GridLines="None">
<Columns> 
   <asp:TemplateField HeaderText="PhotoId" Visible="false">
   <ItemTemplate>
   <asp:Label ID="lblPhotoId" runat="server" Text='<%#Eval("PhotoId") %>'  Visible="false"></asp:Label>
   </ItemTemplate>
   </asp:TemplateField> 

<asp:TemplateField>
        <HeaderTemplate>
            <asp:CheckBox runat="server" ID="headerLevelCheckBox" AutoPostBack="true" oncheckedchanged="headerLevelCheckBox_CheckedChanged" />                
        </HeaderTemplate>
        <ItemTemplate>
            <asp:CheckBox runat="server" ID="rowLevelCheckBox"  AutoPostBack="true"/>
        </ItemTemplate>
 </asp:TemplateField>         
   </Columns>

в коде позади ....

protected void headerLevelCheckBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox headerChkBox = ((CheckBox)gvApproach.HeaderRow.FindControl("headerLevelCheckBox"));

    if (headerChkBox.Checked == true)
    {
        foreach(GridViewRow gvRow in gvApproach.Rows)
        {
            CheckBox rowChkBox = ((CheckBox)gvRow.FindControl("rowLevelCheckBox"));

            rowChkBox.Checked = true;    
        }
    }
    else
    {
        foreach (GridViewRow gvRow in gvApproach.Rows)
        {
            CheckBox rowChkBox = ((CheckBox)gvRow.FindControl("rowLevelCheckBox"));
            rowChkBox.Checked = false;
        }
    }        
}
2 голосов
/ 09 февраля 2012

Я предлагаю не делать этого на сервере, а вместо этого делать это на клиенте. Используйте JavaScript. У вас есть jQuery на этой странице (с этой библиотекой будет проще)? Может быть, этот урок поможет: http://www.4guysfromrolla.com/articles/120810-1.aspx

0 голосов
/ 10 февраля 2012

Если вы хотите сделать это с помощью JavaScript,

Вы должны использовать атрибут всплывающей подсказки checkBox для хранения идентификаторов записей. Например:

<asp:CheckBox ID="rowLevelCheckBox" runat="server" ToolTip='<%#Eval("ID")%>' />

Затем, вы должны использовать код JavaScript, когда установите флажок заголовка.

<script type="text/javascript">
    function SelectAll(element) {
        if ($(element).attr("checked")) {
            $("input[type=checkbox]").attr("checked", "true");
        }
        else {
            $("input[type=checkbox]").attr("checked", "");
        }
    }
</script>

<HeaderTemplate>
<div style="text-align: center; width: 100px; margin: auto">
<input type="checkbox" name="SelectAllCheckBox" onclick="SelectAll(this)">Select All</div>
</HeaderTemplate>

наконец, в коде позади.

Хотите получить выбранные идентификаторы, вы можете использовать этот код.

public List<string> GetAllSelectedIds()
{
    List<string> selectedIds= new List<string>();
    for (int i = 0; i < grid.Rows.Count; i++)
    {
        GridViewRow row = grid.Rows[i];
        if (((CheckBox)row.FindControl("rowLevelCheckBox")).Checked)
        {
            string rowLevelCheckBoxStr = ((CheckBox)row.FindControl("rowLevelCheckBox")).ToolTip;
            selectedIds.Add(rowLevelCheckBoxStr);
        }
    }
    return selectedIds;
}
0 голосов
/ 09 февраля 2012

Чтобы быть более конкретным, вы должны использовать что-то вроде

headerChkBox onclick = "changeCheckboxes (this)"

function changeCheckboxex(mainCheck)
{
    $(yourDivContainer).children("INPUT[type='checkbox']").attr('checked', yourValue);
}

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

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