Событие для галочки на gridview?

2

У меня есть столбец флажка в моем gridview в приложении Windows. Я хочу событие, как только кто-то нажмет на этот флажок.

Как это сделать?

  • 1
    в Приложении Windows нет GridView, есть DataGridView;) - GridView - это веб-элемент управления.
Теги:

2 ответа

2
Лучший ответ

Новый ответ, потому что теперь я знаю его Windows Form

Прежде всего, вам нужно установить, что строка должна быть доступна для редактирования, чтобы пользователь щелкнул в chekbox, чтобы избежать того, что вы можете увидеть, когда клиент щелкнет в CELL строки.

Предположим, что первая ячейка - это флажок:

а второй - текст...

мой код для Form1.cs

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        dgv.DataSource = new testData[] {
            new testData{ CheckBox = true, Name = "One" },
            new testData{ CheckBox = true, Name = "Two" },
            new testData{ CheckBox = false, Name = "Three" },
            new testData{ CheckBox = false, Name = "Four" }            
        };
    }

    private void dgv_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (e.ColumnIndex == 0) // It the Checkbox Column
        {
            DataGridViewRow dgvr = dgv.Rows[e.RowIndex];
            MessageBox.Show(String.Format("Row {0} was cliked ({1})", (e.RowIndex + 1).ToString(), 
                dgvr.Cells[1].Value));
        }
    }
}

public class testData
{
    public Boolean CheckBox { get; set; }
    public String Name { get; set; }
}

дизайн... просто перетащите компонент DataGridView в оконную форму с именем dgv, а в Events дважды щелкните событие CellMouseClick

2

Здесь пример:

<%@ Page Language="C#" AutoEventWireup="true" %>

<script runat="server">
    public class Item
    {
        public string Name { get; set; }
        public bool Checked { get; set; }
    }

    protected void Changed(object sender, EventArgs e)
    {
        CheckBox checkBox = sender as CheckBox;
        Response.Write(checkBox.Checked.ToString());
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            grid.DataSource = new[] 
            { 
                new Item() { Name="1", Checked = true },
                new Item() { Name="2", Checked = false } 
            };
            grid.DataBind();
        }
    }
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="grid" runat="server" AutoGenerateColumns="false">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <%# Eval("Name") %>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:CheckBox ID="check" runat="server" Checked='<%# Eval("Checked") %>' OnCheckedChanged="Changed" AutoPostBack="true" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </div>
    </form>
</body>
</html>
  • 0
    Это хорошая практика, чтобы проверить против нуля после этого. CheckBox checkBox = отправитель как CheckBox; if (checkBox = null) return; или используйте прямое приведение, затем CheckBox checkBox = (CheckBox) отправитель; В противном случае у вас возникнет дурная привычка для новых разработчиков;) Добро пожаловать в клуб придира: D ...
  • 0
    Спасибо, Дарин, но мне нужно решение для оконных форм.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню