Member 7909353 Ответов: 2

Флажок в строке заголовка должен быть установлен, когда все строки данных проверяются в gridview


Я хочу, чтобы этот флажок в строке заголовка автоматически проверялся, когда проверяются все строки данных gridview.

Что я уже пробовал:

<asp:GridView ID="gv" Width="90%" runat="server" Visible="false" AutoGenerateColumns="false"
    PageSize="51" OnRowDataBound="gv_RowDataBound" OnPageIndexChanging="gv_PageIndexChanging" >
    <Columns>
        <asp:TemplateField HeaderText="S.no" ItemStyle-Width="5%">
            <ItemTemplate>
                <%#Container.DataItemIndex+1 %>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="FPS Code" ItemStyle-Width="20%">
            <ItemTemplate>
                <asp:Literal ID="lblCode" runat="server" Text='<%#Eval("Code")%>'></asp:Literal>

            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Details" ItemStyle-Width="20%">
            <ItemTemplate>
                <asp:Label ID="lblDetails" runat="server" Text='<%#Eval("Details")%>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="DBT Option" ItemStyle-Width="20%">
            <HeaderTemplate>
                <asp:CheckBox ID="chkboxSelectAll" runat="server" AutoPostBack="true" OnCheckedChanged="chkboxSelectAll_CheckedChanged" />
            </HeaderTemplate>
            <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
            <ItemTemplate>
                <asp:CheckBox ID="chkFPS" runat="server" AutoPostBack="true" OnCheckedChanged="chkFPS_CheckedChanged" />                                                                                         </ItemTemplate>
        </asp:TemplateField>

    </Columns>
</asp:GridView>

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        
         if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DataTable dt = ViewState["dt"] as DataTable;
                
                string lblCode = ((Literal)e.Row.FindControl("lblCode")).Text;
                CheckBox ChkBoxRows = (CheckBox)e.Row.FindControl("chkFPS");
                DataRow[] row = dt.Select("FPS_Code='" + lblCode + "'", "FPSDBT");
                if (row[0]["FPSDBT"].ToString() == "Yes")
                    ChkBoxRows.Checked = true;
                else
                    ChkBoxRows.Checked = false;
                
            }            
            else if (e.Row.RowType == DataControlRowType.Header)
            {
                bool flage = true;
                //this table shows all  record from data base and column "FPSDBT" shows that recored should be checked based on "FPSDBT"
                DataTable dt = ViewState["dt"] as DataTable; 
                CheckBox chkboxSelectAll= (CheckBox)e.Row.FindControl("chkboxSelectAll");
                DataRow[] row = dt.Select("1=1", "FPSDBT");                
                for (int j = 0; j < row.Length; j++)
                {
                    if (row[j]["FPSDBT"].ToString() == "No")
                    {
                        flage = false;
                        break;
                    }
                }
                if (flage)                
                    chkboxSelectAll.Checked = true;
                   
            }

    }
protected void gv_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            
            BindGridView_gv();
            grdFPSDBT.PageIndex = e.NewPageIndex;
            grdFPSDBT.DataBind();

        }
        catch (Exception ex)
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "temp", "<script language='javascript'>alert('Some internal error occurred. Please try after some time. !!! ');</script>", false);
        }
    }


Он работает нормально.
Но когда рекордное число больше 51-это " нет"
т. е. подряд[52]["FPSDBT"] "нет". Значит, 52-я запись не проверена.
тогда я хочу, чтобы флажок ("chkboxSelectAll") в строке заголовка на странице № 1 (51 запись) был установлен
и флажок ("chkboxSelectAll") на странице № 2 не должен быть установлен.

ZurdoDev

Я не понимаю вашего вопроса.

Member 7909353

Столбец "FPSDBT" показывает, что запись datarow проверена или нет.
Если "FPSDBT" - это "да", то проверено другое мудрое не проверено.
Если у меня есть 100 записей и размер страницы равен 51.
предположим, что "FPSDBT" - это "нет" 52-й записи, тогда я хочу, чтобы флажок в строке заголовка был установлен на странице № 1, а не на странице № 2

ZurdoDev

Итак, реализуйте событие подкачки и снимите флажок.

saeed rajabi

взгляните http://stackoverflow.com/questions/15293641/asp-net-gridview-checkall-and-uncheckall-in-a-single-header-checkbox

2 Ответов

Рейтинг:
8

Member 7909353

else if (e.Row.RowType == DataControlRowType.Header)
            {
int count=0;
                bool flage = true;
                
                DataTable dt = ViewState["dt"] as DataTable; 
                CheckBox chkboxSelectAll= (CheckBox)e.Row.FindControl("chkboxSelectAll");
                DataRow[] row = dt.Select("1=1", "FPSDBT");   


int pageindex = grdFPSDBT.PageIndex;
                count = grdFPSDBT.PageSize * (++pageindex);
                count = count > row.Length ? row.Length : count; 
             
                 for (int j = grdFPSDBT.PageIndex * grdFPSDBT.PageSize; j < count; j++)
                {
                    if (row[j]["FPSDBT"].ToString() == "No")
                    {
                        flage = false;
                        break;
                    }
                }
                if (flage)                
                    chkboxSelectAll.Checked = true;
                   
            }


Рейтинг:
0

Karthik_Mahalingam

попробовать это

int count = 51;
count = row.Length <= 51 ? row.Length : count;
for (int j = 0; j < count; j++)
{
  .
  .

ваш gridview не имеет события разбиения на страницы, поэтому он должен работать нормально... если вы обрабатываете событие разбиения на страницы, то вам придется переписать код, чтобы найти проверенное состояние на этой конкретной странице с помощью Свойство PageIndex [^] и Свойство PageCount [^]


Member 7909353

не работать

Karthik_Mahalingam

Итак, теперь вам нужно справиться с разбиением на страницы?
я найду решение.

Member 7909353

Спасибо это делается с помощью свойства pPageIndex и PageCount

Karthik_Mahalingam

хороший. :)