установите / снимите флажок в отслеживании сетки - PullRequest
0 голосов
/ 20 июля 2011

У меня есть нижний элемент управления gridview с установленным флажком, поэтому мой вопрос: когда я нажимаю кнопку «Сохранить», я могу найти флажок, который был отмечен, и пока здесь нет проблем, но проблема началась, когда пользователь пытаетсяснимите флажок, чтобы отслеживать изменения и сохранять их в проверенной базе данных.любая помощь?

List<Employee> result = new List<Employee>();
    long Id = (long)Session["Id"];
    result = Employee.GetEmployeeById(Id);

foreach (GridViewRow row in gv.Rows)
{
   CheckBox chkBox = row.FindControl("chkSelected") as CheckBox;
   if (c != null)
   {
      if (result.Count > 0)
      {
          foreach (Employee item in result)
          {
             Label Id = row.FindControl("lblId") as Label;
             if (Id.Text == item.Id.ToString())
             {
                 chkBox.Checked = true;
             }
             else
             {
                chkBox.Checked = false;
             }
           }
       }

<asp:TemplateField HeaderText="Select">
 <ItemTemplate>
 <asp:CheckBox ID="chkSelected" runat="server" Checked="false"></asp:CheckBox>
  </ItemTemplate>
 </asp:TemplateField>

Ответы [ 3 ]

1 голос
/ 30 декабря 2011
<script language="javascript" type="text/javascript">
  function SelectAll(cb)
    {
        var gvVar = document.getElementById("<%= gv.ClientID %>");
        var cell;
        if (gvVar.rows.length > 0)
        {
            for (i=1; i<gvVar.rows.length; i++)
            {
                cell = gvVar.rows[i].cells[0];
                for (j=0; j<cell.childNodes.length; j++)
                {                          
                    if (cell.childNodes[j].type =="checkbox")
                    {
                        cell.childNodes[j].checked = document.getElementById(cb).checked;

                    }
                }

            }
        } 
    }
//--------------------------------------------------------------------------------------------.
   function Select(cb)
    {
        var total = parseInt('<%= this.gv.Rows.Count %>');
        var counter=0;
        var cbSelectAll=document.getElementById(cb);
        var gvVar = document.getElementById("<%= gv.ClientID %>");
        var cell;
        if (gvVar.rows.length > 0)
        {
            for (i=1; i<gvVar.rows.length; i++)
            {
                cell = gvVar.rows[i].cells[0];
                for (j=0; j<cell.childNodes.length; j++)
                {                          
                    if (cell.childNodes[j].type =="checkbox")
                    {
                        if(cell.childNodes[j].checked)
                        counter++;
                        else
                        counter--;

                    }
                }

            }
        }
        if(counter==total)
        cbSelectAll.checked=true;
        else if(counter<total)
        cbSelectAll.checked=false;
    }
</script>

//----------------------------------------------------------------------------------------

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow && (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate))
        {
            CheckBox cbSelect = (CheckBox)e.Row.Cells[0].FindControl("cbSelect");
            CheckBox cbSelectAll = (CheckBox)this.gv.HeaderRow.FindControl("cbSelectAll");
            cbSelect.Attributes.Add("onclick", "javascript:Select('" + cbSelectAll.ClientID + "')"); 
            cbSelectAll.Attributes.Add("onclick", "javascript:SelectAll('" + cbSelectAll.ClientID + "')");
        }
    }
0 голосов
/ 20 июля 2011

Возможно, это не самая лучшая идея, но вы можете запросить в базе данных текущее состояние и сравнить с тем, что вы получили с веб-страницы во время нажатия кнопки обратной передачи, или что-то в этом роде.Или вы можете пойти с ответом Brians.

Можно сохранить список объектов в Viewstate и получить к нему доступ при последующей обратной передаче.Единственное, что объект, который вы пытаетесь сохранить, должен быть определен как сериализуемый.

Обновление:

Подход ViewState

Я чувствую, что это может подойти вам, и это требует немного linq.Вам нужно создать класс следующим образом:

[Serializable()]
public class OptionState
{
    //the id of the item
    int ID {get;set;}
    //state of the checkbox
    bool Checked {get;set;}
}

Обратите внимание на атрибут Serializable.Это необходимо для того, чтобы экземпляр сохранился в состоянии просмотра.

Добавьте список параметров в состояние просмотра:

var lstOptions = (from x in <your_option_store> 
    select new OptionState{ID = x.ID, Checked = x.Checked}).ToList();
ViewState.Add("options", lstOptions);

Вот фрагмент кода, который должен войти в ваше нажатие кнопки:

foreach(GridViewRow row in gvOptions.Rows)
{

    //not writing the bit of code
    //which gets the ID and the 
    //state of checkbox of 
    //the gridview row being processed
    OptionState currentState = GetOptionStateObjectFromRow(row);
    List<OptionState> lstStates = (List<OptionState>) ViewState["options"];
    OptionState originalState = lstStates.FirstOrDefault(x => x.ID == currentState.ID);
    if(currentState.Checked != originalState.Checked)
    {

        //the appropriate db call needs to be done here.

    }

}
0 голосов
/ 20 июля 2011

Да, сохранить исходное значение в скрытом поле. Если всегда начинать с false, вы можете использовать JavaScript, чтобы установить для скрытого значения значение true, когда пользователь установил флажок. Используя JQuery, вы можете сделать:

<asp:TemplateField HeaderText="Select" ItemStyle-CssClass="Checked">
 <ItemTemplate>
 <asp:CheckBox ID="chkSelected" runat="server" Checked="false"></asp:CheckBox>
  <asp:HiddenField iD="dh" runat="server" />
  </ItemTemplate>
 </asp:TemplateField>

$("#<%= Grid.ClientID %>").find(".Checked > :checkbox").each(function() {
   $(this).siblings("input[type='hidden']").attr("value", "True");
});

Нечто подобное. На стороне сервера проанализируйте значение и, если оно истинно, вы знаете, что оно изменилось.

НТН.

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