powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / CheckBox в DataGrid не срабатывает
2 сообщений из 2, страница 1 из 1
CheckBox в DataGrid не срабатывает
    #33456148
ram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ram
Гость
Не могу заставить выполнить подпрограмму при нажатии на CheckBox'ы которые расположены в одной из колонок DataGrid, размещенные там через шаблон:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
		<asp:TemplateColumn HeaderText="Отм">
			<ItemTemplate>
			<asp:CheckBox 
			AutoPostBack="True"
			runat="server" 
			id="cb1" 
			OnCheckedChanged="Check_Clicked"
			Checked=<%# Databinder.Eval(Container, "DataItem.otm") %>>
		        </asp:CheckBox>			
                       </ItemTemplate>
		</asp:TemplateColumn>

otm - это поле таблицы SQL-базы, где оно либо 0, либо 1 и в зависимости от этого CheckBox либо отмечен, либо нет.



А сама подпрограммы выглядит вт так:

Код: plaintext
1.
2.
3.
Sub Check_Clicked(sender As Object, e As EventArgs) 
Бла-бла-бла
End Sub

При нажатии на любой CheckBox просто обновляется страница, а код в приведенной подпрограмме не выполняется.
Где ошибка может быть?
...
Рейтинг: 0 / 0
CheckBox в DataGrid не срабатывает
    #33457686
f a q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://dotsite.ru/faq/aspnet/aspdgcheck.aspx Как работать с CheckBox'ом в DataGrid'е?
Ниже представлен примеры, каким образом можно работать с CheckBox'ом в DataGrid'е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
<%@ 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'а.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
<%@ 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).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
<%@ 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>
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / CheckBox в DataGrid не срабатывает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]