问题
I am having problems trying to get a rowcommand event to fire in a gridview. I followed the code example from MSDNet but I cannot figure out why it is not working. The code is below. Thank you.
<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
回答1:
Your gridview doesnt have the event wired up in its markup.
Try adding in onrowcommand="GridViewProducts_RowCommand"
so it looks like this:
<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">
回答2:
@rtpHarry is correct, and that is a valid way to wire up the event. Another method of wiring the event would be to change the signature of your method in the code behind to add Handles Me.GridViewProducts.RowCommand
to the end:
Sub GridViewProducts_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles Me.GridViewProducts.RowCommand
回答3:
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?');");
}
}
回答4:
Enable View State= true will solve your problem
来源:https://stackoverflow.com/questions/4336884/gridview-rowcommand-not-working