Member 14041670 Ответов: 2

Gridview rowcommand не работает


Gridview rowcommand not working after Gridview Bind coding

if i add source using gui rowcommand working but when i bind using code rowcommand give me this error 

Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.


and if i put enableEventValidation="true" in page, rowcommand not working 

how do i make it possible ?


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

GridView в

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm13.aspx.cs" Inherits="WebApplication3.WebForm13"  enableEventValidation="false"%>

<!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="GridView1" runat="server" AutoGenerateColumns="False" 
        CellPadding="4" ForeColor="#333333" GridLines="None" Width="100%" 
            onrowcommand="GridView1_RowCommand">
        <AlternatingRowStyle BackColor="White" />
        <Columns>
            <asp:TemplateField AccessibleHeaderText="AID" HeaderText="AID">
            <EditItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Eval("AID") %>'></asp:Label>
            </EditItemTemplate>
            <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("AID") %>'></asp:Label>
            </ItemTemplate>
            
            </asp:TemplateField>
            <asp:BoundField HeaderText="FIRST NAME" DataField= "FirstName" />
            <asp:BoundField HeaderText="LAST NAME"  DataField= "LastName"/>
            <asp:BoundField HeaderText="EMP. CODE" DataField= "EMPID" />
            <asp:BoundField HeaderText="GENDER" DataField= "GENDER" />
            <asp:BoundField HeaderText="EMAIL" DataField= "EMAILID" />
            <asp:TemplateField HeaderText="VIEW">
                <ItemTemplate>
                    <asp:Button ID="Button1" runat="server" Text="VIEW"  CommandArgument="<%#((GridViewRow) Container).RowIndex %>" CommandName="viewuser" CausesValidation="True" Height="24px" Width="20px" Font-Size="11px" BackColor="#6699FF" BorderColor="Black" BorderWidth="0.5px" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="EDIT">
                <ItemTemplate>
                    <asp:Button ID="Button2" runat="server" Text="EDIT" CommandArgument="<%#((GridViewRow) Container).RowIndex %>" CommandName="viewuser" CausesValidation="True" Height="24px" Width="20px" Font-Size="11px" BackColor="#6699FF" BorderColor="Black" BorderWidth="0.5px" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <EditRowStyle BackColor="#2461BF" />
        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" 
            HorizontalAlign="Left" />
        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#EFF3FB" />
        <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#F5F7FB" />
        <SortedAscendingHeaderStyle BackColor="#6D95E1" />
        <SortedDescendingCellStyle BackColor="#E9EBEF" />
        <SortedDescendingHeaderStyle BackColor="#4870BE" />
    </asp:GridView>
</div>
</form>





    
</body>
</html>

-------------------------------------------------------------------
Загрузка страниц

protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
                using (SqlConnection con = new SqlConnection(cs))
                {
                    con.Open();
                    SqlCommand cmd = new SqlCommand
                    (@"SELECT [AID],[FirstName], [LastName], [EMPID], [GENDER], [EMAILID] FROM USERSMST", con);
                    cmd.Connection = con;
                    DataTable dt = new DataTable();
                    SqlDataAdapter sda = new SqlDataAdapter(cmd);
                    sda.Fill(dt);
                    GridView1.DataSource = dt;
                    GridView1.DataBind();
                }



            }
            catch (SqlException EX)
            {
                Response.Write(EX.Message);
            }
        }


-----------------------------------------
Rowcommand

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
       if (e.CommandName == "viewuser")
           {
               Response.Redirect("userlist.aspx");
           }

akshay_zz

Можете ли вы поместить свой код функции GridView1_RowCommand. Еще одна вещь, которую вы можете поместить отладчик в GridView1_RowCommand в функции и можете проверить, что отладчик получает удар или нет.

Member 14041670

я обновил свой вопрос и код.

akshay_zz

Можете ли вы также показать свою функцию загрузки страниц?

Member 14041670

Я уже поставил загрузку страницы.
это мое имя спейс.

использование системы;
использование системы.Коллекции.Общий;
использование System.Linq;
использование системы.Сеть;
использование System.Web.UI;
используя системы.Веб.Пользовательского интерфейса.WebControls;
использование системы.Конфигурация;
использование System.Data;
используя системы.Данных.Поставщики sqlclient;

пространство имен WebApplication3
{
общественный разделяемого класса WebForm13 : система.Веб.Пользовательского интерфейса.Страницы
{
охраняемых недействительными в(объект отправителя, EventArgs в электронной)

akshay_zz

Что ты делаешь приятель. Это только определение загрузки страницы, показать часть тела

Member 14041670

его уже обновили в вопросе

Vincent Maverick Durano

Где ты персонализация/заполнения таблицы? Покажите нам вашу загрузку страницы и код события RowCommand.

Member 14041670

я обновил свой вопрос.

2 Ответов

Рейтинг:
7

akshay_zz

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

protected void Page_Load(object sender, EventArgs e)
{
  if(!Page.IsPostBack)
  {
   //Control Initialization
   //Databinding
   bind_grid()
  }
}

private void bind_grid()
{
  // Bind your grid here
}

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
       if (e.CommandName == "viewuser")
           {
               Response.Redirect("userlist.aspx");
           }
}


Я думаю, что это должно сработать для вас. Если это поможет, пожалуйста, отметьте это как ответ.


Member 14041670

Его работа
Спасибо Тебе Брат

akshay_zz

Вы также можете пойти на if(!IsPostBack) вместо if(!Page.IsPostBack)

Member 14041670

да, я пробовал и то, и другое, это работает.

Рейтинг:
13

Bryian Tan

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

В методе Page_Load обновите код, чтобы обернуть логику внутри !IsPostBack

if (!IsPostBack)
{
   try  {
       ....
   }
}

Эта нить объяснила ситуацию.
GridView вместе с изменением индекса страницы и кнопкой внутри | The ASP.NET форумы[^]