Столбцы флажка GridView и события - PullRequest
1 голос
/ 28 августа 2009

Я создал вид сетки с колонкой флажков. Я хочу, чтобы пользователь установил флажки, нажал кнопку регистрации (вне сетки) и получил заголовок из выбранной строки. Из того, что я прочитал, я должен поставить флажок в событии нажатия кнопки. Я сделал это, но, видимо, единственный раз, когда он входит в это событие при загрузке страницы и непосредственно перед загрузкой страницы, все выбранные флажки стираются. Таким образом, мой флажок для выбранного флажка никогда не срабатывает. Есть ли событие, которое лучше всего выполнить эту проверку, или, возможно, способ сохранить эти значения при загрузке страницы? Ниже приведен не весь мой код, а только затронутые части.

    protected void regButton_Click(Object sender, EventArgs e)
    {
        StringBuilder regClasses = new StringBuilder();
        for (int i = 0; i < SQLQueryClassListings.Rows.Count; i++)
        {
            //Response.Write(SQLQueryClassListings.Rows[i].Cells[0].Text + " checkbox check ");
            GridViewRow checkRow = SQLQueryClassListings.Rows[i];
            bool reg = ((CheckBox)(checkRow.FindControl("RowCheckBox"))).Checked;
            if (reg)
            {
                regClasses.Append(SQLQueryClassListings.Rows[i].Cells[0].Text + " ");
            }
        }
        Response.Write(regClasses);
    }

<asp:GridView ID="SQLQueryClassListings" AutoGenerateColumns="false" runat="server" 
        BorderWidth="1px" BackColor="White" CellPadding="5" BorderColor="Black" RowStyle-BorderColor = "Black"
        HeaderStyle-BackColor="#0D69F2" HeaderStyle-ForeColor="White" AlternatingRowStyle-BackColor="#E8E8E8" HeaderStyle-BorderColor="Black" GridLines="Both">
        <Columns>
            <asp:BoundField HeaderText="Classes" DataField="LeafName" HeaderStyle-HorizontalAlign="Left" ItemStyle-Width="250" 
                ItemStyle-BorderColor="#ADADAD" HeaderStyle-BorderColor ="Black"/>
            <asp:BoundField HeaderText="Teacher" DataField="TeacherName" HeaderStyle-HorizontalAlign="Left" ItemStyle-Width="200" 
                ItemStyle-BorderColor="#ADADAD" HeaderStyle-BorderColor ="Black"/>
            <asp:BoundField HeaderText="Available" DataField="SemesterEnds" HeaderStyle-HorizontalAlign="Center"  
                ItemStyle-HorizontalAlign ="Center" ItemStyle-Width="150" ItemStyle-BorderColor="#ADADAD" HeaderStyle-BorderColor ="Black"/>
            <asp:HyperLinkField HeaderText="Course Description & Career Tracks" DataNavigateUrlFields="ApplicableTracks" 
                Text="See Description" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign ="Center" ItemStyle-BorderColor="#ADADAD" HeaderStyle-BorderColor ="Black"/>
            <asp:TemplateField HeaderText="Register" HeaderStyle-BorderColor="Black" ItemStyle-BorderColor = "#ADADAD" ItemStyle-HorizontalAlign="Center">
                <ItemTemplate>
                    <asp:CheckBox runat="server" ID="RowCheckBox"/>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <p>
    <asp:Button ID="Button1" runat="server" Text="Register" OnClientClick="return confirm('You have sucessfully registered!')"
        OnClick="regButton_Click" />

Ответы [ 3 ]

1 голос
/ 28 августа 2009

Вам необходимо войти в событие ItemDataBound элемента управления GridView, найти CheckBox по идентификатору и выполнить все, что вам нужно.

0 голосов
/ 28 августа 2009

Трудно знать наверняка, не видя больше вашего кода, но похоже, что ваша страница повторно связывает GridView на обратных передачах (таких как ваше событие regButton_Click). Таким образом, он перестраивает GridView каждый раз при загрузке страницы - даже после того, как ваш пользователь нажимает кнопку регистрации.

Если это так, вы можете исправить это, изменив код, который вы используете для привязки вашего GridView следующим образом:

if (!this.IsPostback) {
    SQLQueryClassListings.DataBind();
}

(Предполагается, что у вас включена ViewState для страницы (или, по крайней мере, GridView). Существуют и другие механизмы, которые можно использовать для передачи состояния клиента (например, выбор флажков) на сервер, но ViewState (для всех его ошибок) является инструментом по умолчанию для doign, так в ASP.NET.)

Следствием этого является то, что данные, показанные в GridView, не будут полностью обновленными, но если вы можете это терпеть, это простой способ выполнить то, что вы хотите.

0 голосов
/ 28 августа 2009

Вы должны прочитать флажки из GridView. Таким образом, этот код вернет идентификаторы проверенных строк. Это даст вам идею, и тогда вы сможете изменить ее на то, что вам нужно.

protected string getCheckedIds(GridView gv)
{
    StringBuilder sb = new StringBuilder();

    foreach (GridViewRow gvr in gv.Rows)
    {
        if (!gvrIsChecked(gvr))   // see below for this method
            continue;

        if (sb.Length > 0)
            sb.Append(",");

         sb.Append(gv.DataKeys[gvr.DataItemIndex].Value);

    }

    return sb.ToString();

}


protected bool gvrIsChecked(GridViewRow gvr)
{
    // The location of your checkbox may be different.
    object cb = gvr.Cells[0].Controls[gvr.Cells[0].Controls.Count - 2];

    if (cb.GetType() != typeof(CheckBox))
        return false;    

    if (!((CheckBox)cb).Checked)
        return false;

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