Узнайте флажок в DATAGRID в ASP.NET - PullRequest
0 голосов
/ 13 октября 2010

У меня есть GRIDVIEW и несколько CHECKBOXS.

Когда я выбрал CHECKBOX, мне нужно запустить какой-нибудь код.

Чтобы его обнаружить, я использую EVENT HANDLER для CHECKBOX, включенного вGRIDVIEW.

Я не могу получить доступ к CHECKBOX с моим неправильным кодом.

Вы понимаете, что я делаю неправильно?Спасибо за вашу помощь.Пока

ASPX

    <asp:Label ID="uxMessageDisplayer" runat="server" Visible="False" EnableViewState="False"></asp:Label>
<asp:GridView ID="uxUserListDisplayer" runat="server" AutoGenerateColumns="False"
    OnRowDataBound="uxUserListDisplayer_RowDataBound">
    <Columns>
        <asp:TemplateField HeaderText="Active">
            <ItemTemplate>
                <asp:CheckBox ID="uxActiveCheckBoxSelector" runat="server" AutoPostBack="true" OnCheckedChanged="uxRoleCheckBoxSelector_CheckChanged" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Users">
            <ItemTemplate>
                <asp:Label runat="server" ID="uxUserNameLabelDisplayer" Text='<%# Container.DataItem %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:LinkButton ID="uxLinkEditButton" runat="server" CausesValidation="False" CommandName="Edit"
                    Text="Edit"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:LinkButton ID="uxLinkDeleteButton" runat="server" CausesValidation="False" CommandName="Delete"
                    Text="Delete"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Код за

    protected void uxRoleCheckBoxSelector_CheckChanged(object sender, EventArgs e)
    {
         // Reference the CheckBox that raised this event   
        //CheckBox uxActiveCheckBoxSelector = sender as CheckBox;

        CheckBox activeCheckBox = (CheckBox)FindControl("uxActiveCheckBoxSelector");

        if (activeCheckBox.Checked == true)
        {
            uxMessageDisplayer.Text = "T - Aproved User";
            uxMessageDisplayer.Enabled = false;
        }
        else
        {
            uxMessageDisplayer.Text = "F - NOT Aproved User";
            uxMessageDisplayer.Enabled = false;
        }
       }

Ответы [ 3 ]

2 голосов
/ 13 октября 2010

Если я не ошибаюсь по вашему вопросу, вы пытаетесь установить текст метки в той же строке с checkbox в зависимости от его проверенного состояния.

Ниже приведен фрагмент кода, который я пробовална моем компьютере, надеюсь, это поможет.

.aspx:

<asp:GridView ID="GridView1" runat="server">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="CheckBox1" runat="server" OnCheckedChanged="CheckBox1_CheckChanged" AutoPostBack="true" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

.cs:

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
        return;

    //create dummy data
    List<string> rows = new List<string>();
    Enumerable.Range(1, 5).ToList().ForEach(x => rows.Add(x.ToString()));

    //bind dummy data to gridview
    GridView1.DataSource = rows;
    GridView1.DataBind();
}

    protected void CheckBox1_CheckChanged(object sender, EventArgs e)
    {
        //cast sender to checkbox
        CheckBox CheckBox1 = (CheckBox)sender;

        //retrieve the row where checkbox is contained
        GridViewRow row = (GridViewRow)CheckBox1.NamingContainer;

        //find the label in the same row
        Label Label1 = (Label)row.FindControl("Label1");

        //logics
        if (CheckBox1 != null)  //make sure checkbox1 is found
        {
            if (CheckBox1.Checked)
            {
                if (Label1 != null) //make sure label1 is found
                {
                    Label1.Text = "Checked";
                }

            }
            else
            {
                if (Label1 != null)
                {
                    Label1.Text = "Unchecked";
                }
            }
        }
    }
1 голос
/ 13 октября 2010

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

CheckBox activeCheckBox = (CheckBox)sender;

что такое "uxActiveCheckBoxSelector" и почему вы игнорируете sender?

0 голосов
/ 14 октября 2010

Код исправлен в соответствии с предложением! Полезный ресурс для начинающих

        protected void uxRoleCheckBoxSelector_CheckChanged(object sender, EventArgs e)
    {
        // Cast sender to CheckBox
        CheckBox activeCheckBox = (CheckBox)sender;

        // Retrieve the row where CheckBox is contained (NamingContainer used to retrive parent control
        GridViewRow row = (GridViewRow)activeCheckBox.NamingContainer;

        if (activeCheckBox.Checked == true)
        {
            uxMessageDisplayer.Text = "T - Aproved User";
        }
        else
        {
            uxMessageDisplayer.Text = "F - NOT Aproved User";
        }
    }
...