Gridview RowCommand无法正常工作

时间:2010-12-02 15:51:39

标签: asp.net vb.net gridview rowcommand

我在尝试在gridview中触发rowcommand事件时遇到问题。我按照MSDNet的代码示例,但我无法弄清楚它为什么不起作用。代码如下。谢谢。

<asp:GridView ID="GridViewProducts" runat="server" AutoGenerateColumns="False" 
    BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" 
    CellPadding="5" CellSpacing="1" DataKeyNames="Pkey" 
    DataSourceID="SqlDataSourceProducts" ForeColor="Black" GridLines="Vertical">
    <FooterStyle BackColor="#CCCCCC" />
    <PagerSettings PageButtonCount="20" />
    <Columns>
        <asp:BoundField DataField="Product" HeaderText="Product" >
            <HeaderStyle HorizontalAlign="Left" />
            <ItemStyle HorizontalAlign="Left" />
        </asp:BoundField>
        <asp:TemplateField HeaderText="Interest">
            <ItemTemplate>
                <asp:DropDownList ID="ddlProductInterest" runat="server" SelectedValue='<%# Bind("ProductInterest") %>'>
                    <asp:ListItem></asp:ListItem>
                    <asp:ListItem>Low</asp:ListItem>
                    <asp:ListItem>Medium</asp:ListItem>
                    <asp:ListItem>High</asp:ListItem>
                    <asp:ListItem>None</asp:ListItem>
                </asp:DropDownList>
             </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="">
            <ItemTemplate>
                <asp:Button runat="server" ID="TestButton" Text="Button" CommandName="Test" 
                CommandArgument="<%# CType(Container, GridViewRow).RowIndex %>" />
            </ItemTemplate>
            <HeaderStyle HorizontalAlign="center" />
            <ItemStyle HorizontalAlign="center" />
       </asp:TemplateField>
    </Columns>
    <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
    <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="Silver" Font-Bold="True" ForeColor="Black" />
    <AlternatingRowStyle BackColor="#CCCCCC" />
</asp:GridView>

++Code Behind +++

Sub GridViewProducts_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)

   If e.CommandName = "Test" Then

    Dim index = Convert.ToInt32(e.CommandArgument)
    Dim row = GridViewProducts.Rows(index)
    Dim MyString As String = row.Cells(0).Text

    strSQL = "INSERT INTO tblClosedProducts (" & _
         "Product, ClosedBy, DateClosed " & _
         ") VALUES (" & _
         "@Product, @ClosedBy, @DateClosed " & _
         ")"

    Dim MyParameters1 As SqlParameter() = { _
       New SqlParameter("@Product", SqlDbType.VarChar), _
       New SqlParameter("@ClosedBy", SqlDbType.VarChar), _
       New SqlParameter("@DateClosed", SqlDbType.SmallDateTime) _
    }

    MyParameters1(0).Value = row.Cells(0).Text
    MyParameters1(1).Value = GetInfo.GetFullName(UCase(Right(HttpContext.Current.User.Identity.Name.ToString(), 4)))
    MyParameters1(2).Value = DateAdd("h", -1, Now())

    objData.SQLExecuteNonQuery(strSQL, CommandType.Text, MyParameters1)

  End If

End Sub

4 个答案:

答案 0 :(得分:5)

您的gridview没有将事件连接到其标记中。

尝试添加onrowcommand="GridViewProducts_RowCommand",看起来像这样:

<asp:GridView ID="GridViewProducts" runat="server" AutoGenerateColumns="False" 
BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" 
CellPadding="5" CellSpacing="1" DataKeyNames="Pkey" 
DataSourceID="SqlDataSourceProducts" ForeColor="Black" GridLines="Vertical"
onrowcommand="GridViewProducts_RowCommand">

答案 1 :(得分:0)

@rtpHarry是正确的,这是连接事件的有效方法。连接事件的另一种方法是在后面的代码中更改方法的签名,以便将Handles Me.GridViewProducts.RowCommand添加到结尾:

Sub GridViewProducts_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles Me.GridViewProducts.RowCommand

答案 2 :(得分:0)

protected void Add_Update_Remove_Row(int Index, string Operation)
{
    //DataTable dt = (DataTable)ViewState["Table_BinaryPayment"];

    int ID = Index;

    Label lblddt = (Label)GridView1.Rows[Index].FindControl("Label2");
    Label lblttm = (Label)GridView1.Rows[Index].FindControl("Label1");
    Label lblid = (Label)GridView1.Rows[Index].FindControl("lblID");
    Label lblaeamt = (Label)GridView1.Rows[Index].FindControl("lblamt");

    Label lblprojID = (Label)GridView1.Rows[Index].FindControl("lblprojectID");
    Label lblpaydetails = (Label)GridView1.Rows[Index].FindControl("lblpaydetails");
    Label lblexpdate = (Label)GridView1.Rows[Index].FindControl("lblExpDate");
    Label lblexpttime = (Label)GridView1.Rows[Index].FindControl("lblExpTime");

    Label lblalloycodes = (Label)GridView1.Rows[Index].FindControl("lblalloycode");
    Label lblalloyrates = (Label)GridView1.Rows[Index].FindControl("lblalloyRate");
    Label lbladddelivered = (Label)GridView1.Rows[Index].FindControl("lbladdtodeliver");
    Label lblEID = (Label)GridView1.Rows[Index].FindControl("lblEID");

    ViewState["DispTime"] = lblttm.Text;
    ViewState["ExpTime"] = lblexpttime.Text;

    if (Operation == "Modify")
    {
        //lblchqNo.Text = txtchequeNO1.Text;
        //lblchqDate.Text = txtchequeDate1.Text;
        //lblAccountNo.Text = txtAccountNo.Text;
        //lblBName.Text = txtBankName.Text;
        lblddt.Text = txtdispdate.Text;

        if (ddldisphr.SelectedItem.Text == "00" & ddldispmin.SelectedItem.Text == "00" & ddldispsec.SelectedItem.Text == "00")
        {
            lblttm.Text = ViewState["DispTime"].ToString();

        }
        else
        {
            lblttm.Text = (ddldisphr.SelectedItem.Text + ":" + ddldispmin.SelectedItem.Text + ":" + ddldispsec.SelectedItem.Text);
        }

        if (ddlexphr.SelectedItem.Text == "00" & ddlexpmin.Text == "00" & ddlexpsec.Text == "00")
        {
            lblexpttime.Text = ViewState["ExpTime"].ToString();
        }
        else
        {
            lblexpttime.Text = (ddlexphr.SelectedItem.Text + ":" + ddlexpmin.Text + ":" + ddlexpsec.Text);
        }

        lblaeamt.Text = txtadvPayment.Text;

        lblpaydetails.Text = txtpaymentdetails.Text;
        lblexpdate.Text = txtexpdate.Text;

        lblalloycodes.Text = ddlalloycode.SelectedItem.Text;
        lblalloyrates.Text = txtalloyrate.Text;
        lbladddelivered.Text = txtaadtodel.Text;

        //ExecuteProcedures ex = new ExecuteProcedures(4);
        //string proc="Inse_Clientorder";
        //ex.Parameters.Add("@dtPayment_Date", SqlDbType.DateTime, lblddt.Text);
        //ex.Parameters.Add("@Dispath_Time", SqlDbType.VarChar, lblttm.Text);
        //ex.Parameters.Add("@Enquiry_ID", SqlDbType.VarChar, ID );
        //ex.Parameters.Add("@numAdvance_Amount", SqlDbType.Float , Convert.ToDouble(txtadvPayment.Text ));
        //bool s = ex.InvokeProcedure(proc);

        ExecuteProcedures ex = new ExecuteProcedures(12);
        //string proc = "Inse_Clientorder123";
        string proc = "Inse_Clientorder321";
        ex.Parameters.Add("@dtPayment_Date", SqlDbType.DateTime, Convert.ToDateTime(lblddt.Text));
        //if (ddldisphr.SelectedItem.Text == "00" & ddldispmin.SelectedItem.Text == "00" & ddldispsec.SelectedItem.Text == "00")
        //{
        //    ex.Parameters.Add("@Dispath_Time", SqlDbType.VarChar, ViewState["DispTime"]);

        //}
        //else
        //{
        //    ex.Parameters.Add("@Dispath_Time", SqlDbType.VarChar, lblttm.Text);
        //}

        //if (ddlexphr.SelectedItem.Text == "00" & ddlexpmin.Text == "00" & ddlexpsec.Text == "00")
        //{
        //    ex.Parameters.Add("@ExpTime", SqlDbType.VarChar, ViewState["ExpTime"]);
        //}
        //else 
        //{
        //    ex.Parameters.Add("@ExpTime", SqlDbType.VarChar, lblexpttime.Text);
        //}

        ex.Parameters.Add("@Dispath_Time", SqlDbType.VarChar, lblttm.Text);
        ex.Parameters.Add("@ExpTime", SqlDbType.VarChar, lblexpttime.Text);

        ex.Parameters.Add("@Advance_Payment_ID", SqlDbType.Int, Convert.ToInt32(lblid.Text));
        ex.Parameters.Add("@numAdvance_Amount", SqlDbType.VarChar, lblaeamt.Text);

        ex.Parameters.Add("@AlooyCode", SqlDbType.VarChar, lblalloycodes.Text);
        ex.Parameters.Add("@numRate", SqlDbType.Float, Convert.ToDouble(lblalloyrates.Text));
        ex.Parameters.Add("@vcrDescription", SqlDbType.VarChar, lbladddelivered.Text);
        ex.Parameters.Add("@Client_Ordered_Projects_ID", SqlDbType.Int, Convert.ToInt32(lblprojID.Text));
        ex.Parameters.Add("@Enquiry_ID", SqlDbType.Int, Convert.ToInt32(lblEID.Text));

        ex.Parameters.Add("@dtExpectedPayment_Date", SqlDbType.DateTime, Convert.ToDateTime(lblexpdate.Text));

        ex.Parameters.Add("@vcrPayment_Details", SqlDbType.VarChar, lblpaydetails.Text);

        bool s = ex.InvokeProcedure(proc);

        if (s == true)
        {
            CommonFunctions.Alert("Records Updated Successfully", this.Page);

        }
        else
        {
            CommonFunctions.Alert("Error In Updation", this.Page);
        }

        clear();

    }
}

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    //if (e.CommandName == "Modify")
    //{
    //    string strID = e.CommandArgument.ToString();
    //    strID = CommonFunctions.Encrypt(strID);
    //    Response.Redirect("Client_Order.aspx?Project_ID=" + strID);
    //}

    if (e.CommandName == "Modify")
    {

        string strID = e.CommandArgument.ToString();
        int intRowIndex = ((GridViewRow)((LinkButton)e.CommandSource).Parent.Parent).RowIndex;
        //Session[rowindex] = intRowIndex;
        txtdispdate.Text = GridView1.Rows[intRowIndex].Cells[6].Text;
        string strdisp = ((ddldisphr.SelectedItem.Text) + ":" + (ddldispmin.SelectedItem.Text) + ":" + (ddldispsec.SelectedItem.Text)).ToString();
        lbltime.Text = GridView1.Rows[intRowIndex].Cells[7].Text;
        Label lblClienorderiid = (Label)GridView1.Rows[intRowIndex].FindControl("lblcLOID");
        Label lbledate = (Label)GridView1.Rows[intRowIndex].FindControl("Label2");
        Label lbletime = (Label)GridView1.Rows[intRowIndex].FindControl("Label1");
        Label lbliid = (Label)GridView1.Rows[intRowIndex].FindControl("lblID");
        Label lblaamt = (Label)GridView1.Rows[intRowIndex].FindControl("lblamt");
        Label lblEID = (Label)GridView1.Rows[intRowIndex].FindControl("lblEID");

        Label lblprojID = (Label)GridView1.Rows[intRowIndex].FindControl("lblprojectID");
        Label lblpaydetails = (Label)GridView1.Rows[intRowIndex].FindControl("lblpaydetails");
        Label lblexpdate = (Label)GridView1.Rows[intRowIndex].FindControl("lblExpDate");
        Label lblexpttime = (Label)GridView1.Rows[intRowIndex].FindControl("lblExpTime");

        Label lblalloycodes = (Label)GridView1.Rows[intRowIndex].FindControl("lblalloycode");
        Label lblalloyrates = (Label)GridView1.Rows[intRowIndex].FindControl("lblalloyRate");
        Label lbladddelivered = (Label)GridView1.Rows[intRowIndex].FindControl("lbladdtodeliver");

        ViewState["Index"] = intRowIndex;
        ViewState["CommandName"] = e.CommandName;

        txtdispdate.Text = lbledate.Text;
        lbltime.Text = lbletime.Text;
        txtadvPayment.Text = lblaamt.Text;
        ddlalloycode.SelectedItem.Text = lblalloycodes.Text;
        txtalloyrate.Text = lblalloyrates.Text;
        txtaadtodel.Text = lbladddelivered.Text;
        txtpaymentdetails.Text = lblpaydetails.Text;
        txtexpdate.Text = lblexpdate.Text;
        lblexptimess.Text = lblexpttime.Text;

        pnl2.Visible = true;
        //lbltime.Text = lbltm.Text;

        //Add_Update_Remove_Row( intRowIndex , e.CommandName);
    }

    else if (e.CommandName == "Del")
    {
        string strID = e.CommandArgument.ToString();
        string strSql = "Delete from Client_Order where Client_ID = " + strID;
        string str_query = "Update Enquiry set OrderExecuted='No' where Enquiry_ID = " + strID;
        //string str_query = "delete from Enquiry  where Enquiry_ID = " + strID;
        Dentry de = new Dentry();
        de.RunCommand(strSql);
        de.RunCommand(str_query);
        Bind_Data();
    }     
    else if(e.CommandName =="Invoice")
    {
        string strID = e.CommandArgument.ToString();
        strID = CommonFunctions.Encrypt(strID);
        string strType = CommonFunctions.Encrypt("New");
        Response.Redirect("New_Order_Project_Invoice_Entry.aspx?Project_ID=" + strID + "&Type=" + strType);
    }
    else if (e.CommandName == "Delivered")
    {
        string strId = e.CommandArgument.ToString();
        string str_query = "Update Enquiry set vcrDelivered='Yes' where Enquiry_ID=" + strId;
        Dentry de = new Dentry();
        de.RunCommand(str_query);
        Bind_Data();
    }
}

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowIndex > -1)
    {
        LinkButton lnk = (LinkButton)e.Row.FindControl("lnkDelete");
        lnk.Attributes.Add("onClick", "return confirm('Are you sure to delete this record?');");
    }
}

答案 3 :(得分:0)

启用View State = true将解决您的问题