dotSITE
Work in Murano Software. Учебник по C# Шаблоны проектирования
новости материалы решения форумы группы настройки/о проекте
Назад

Как работать с CheckBox'ом в DataGrid'е?

Ниже представлен примеры, каким образом можно работать с CheckBox'ом в DataGrid'е.

<%@ Page Language="C#" %>
<script runat="server">
  public class TestInfo {
    public TestInfo(int i) {
      _i = i;
    }
    int _i;
    public int Id {
      get {
        return _i;
      }
    }
    public string Name  {
      get {
        return string.Format("Элемент #{0}",_i);
      }
    }
    public bool Selected {
      get {
        return ((_i % 2) == 1);
      }
    }
  }

  TestInfo[] CreateDataSource() {
    TestInfo[] ds = new TestInfo[10];
    for(int i=0; i< 10;i++) {
      ds[i] = new TestInfo(i);
    }
    return ds;
  }

  void Page_Load(object sebder, EventArgs e) {
    if (!IsPostBack) {
      dg.DataSource = CreateDataSource();
      dg.DataKeyField = "Id";
      dg.DataBind();
    }
  }

  void OnMyButtonClick(object sender, EventArgs e) {
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    foreach(DataGridItem item in dg.Items) {
      if (item.ItemType == ListItemType.Item ||
        item.ItemType == ListItemType.AlternatingItem) {
        CheckBox cb = (CheckBox)item.FindControl("_checkBox");
        if (cb.Checked) {
          sb.AppendFormat("Элемент номер {0} выбран<br>",
            dg.DataKeys[item.ItemIndex],
            Environment.NewLine);
        }
      }
    }
    _myLabel.Text = sb.ToString();
  }
</script>
<form runat="server">
  <asp:DataGrid id="dg" runat="server" AutoGenerateColumns="false">
    <Columns>
      <asp:TemplateColumn>
        <ItemTemplate>
          <asp:CheckBox runat="server" id="_checkBox" 
            Checked='<%# DataBinder.Eval(Container.DataItem,"Selected")%>'/>
        </ItemTemplate>
      </asp:TemplateColumn>
      <asp:BoundColumn DataField="Name" HeaderText="Name"/>
    </Columns>
  </asp:DataGrid>
  <hr>
  <asp:Button runat="server" id="_myButton" 
    Text="Проверить" OnClick="OnMyButtonClick"/>
  <hr>
  <asp:Label runat="server" id="_myLabel"/>
</form>

Так же можно определять изменившееся значение отдельно у каждого CheckBox'а.

<%@ Page Language="C#" %>
<script runat="server">
  public class TestInfo {
    public TestInfo(int i) {
      _i = i;
    }
    int _i;
    public int Id {
      get {
        return _i;
      }
    }
    public string Name  {
      get {
        return string.Format("Элемент #{0}",_i);
      }
    }
    public bool Selected {
      get {
        return ((_i % 2) == 1);
      }
    }
  }

  TestInfo[] CreateDataSource() {
    TestInfo[] ds = new TestInfo[10];
    for(int i=0; i< 10;i++) {
      ds[i] = new TestInfo(i);
    }
    return ds;
  }

  void Page_Load(object sebder, EventArgs e) {
    if (!IsPostBack) {
      dg.DataSource = CreateDataSource();
      dg.DataKeyField = "Id";
      dg.DataBind();
    }
  }

  void OnStatusChecked(object sender, EventArgs e) {
    CheckBox cb = (CheckBox)sender;
    DataGridItem item = (DataGridItem)cb.Parent.Parent;
    int id = (int)dg.DataKeys[item.ItemIndex];
    _myLabel.Text = string.Format("Изменился №{0} - Текущее значение: {1}", id, cb.Checked);
  }
</script>
<form runat="server">
  <asp:DataGrid id="dg" runat="server" AutoGenerateColumns="false">
    <Columns>
      <asp:TemplateColumn>
        <ItemTemplate>
          <asp:CheckBox runat="server" id="_checkBox" autopostback="true"
		  	OnCheckedChanged="OnStatusChecked"
            Checked='<%# DataBinder.Eval(Container.DataItem,"Selected")%>'/>
        </ItemTemplate>
      </asp:TemplateColumn>
      <asp:BoundColumn DataField="Name" HeaderText="Name"/>
    </Columns>
  </asp:DataGrid>
  <hr>
  <asp:Label runat="server" id="_myLabel"/>
</form>

Еще один способ получения выделенных CheckBox'ов в DataGrid'е показан ниже (по материалам топика CheckBox v DataGrid).

<%@ Page %>
<script runat="server" language="c#"> 

  string _current = "";
  void Page_Load(object sender, EventArgs e) {
    if (IsPostBack) _current = "," + Request.Form["uid"].ToString() + ",";
    _grid.DataSource = new int[] {1,2,3,4,5,6,7,8,9,10};
    _grid.DataBind();
  }
  
  void OnSaveButtonClick(object sender, EventArgs e) {
    Response.Write(Request.Form["uid"]);
  }
  
  string IsChecked(int id) {
    if(_current.IndexOf("," + id.ToString() + ",") >= 0) {
      return "checked";
    } else {
      return "";
    }
  }
</script>

<form runat="server">
  <asp:DataGrid runat="server" id="_grid">
    <Columns>
      <asp:TemplateColumn>
        <ItemTemplate>
          <input <%#IsChecked((int) DataBinder.Eval(Container, "DataItem"))%> type="checkbox" name="uid" value='<%# DataBinder.Eval(Container, "DataItem")%>'> 
        </ItemTemplate>
      </asp:TemplateColumn>
      <asp:TemplateColumn>
        <ItemTemplate>
          Item <%# DataBinder.Eval(Container, "DataItem")%>
        </ItemTemplate>
      </asp:TemplateColumn>
    </Columns>
  </asp:DataGrid>
  
  <asp:Button runat="server" Text="Save" Width="100px" onclick="OnSaveButtonClick"/>
</form>

 Назад
Контакт Реклама на сайте Спонсорам Веб мастерам

Лицензионное соглашение - © 2000-2012 dotSITE
Хостинг .NET предоставлен PARKING.RU
Поддержку сайта осуществляет Murano Software Inc., Offshore software development