我尝试批准文件 但是当我点击批准按钮时 它告诉我错误
无法将“System.Web.UI.WebControls.Button”类型的对象强制转换为“System.Web.UI.WebControls.LinkButton”。
gridview的
<asp:GridView ID="GrdFileApprove" runat="server" AutoGenerateColumns="False"
onrowcommand="GrdFileApprove_RowCommand">
<Columns>
<asp:TemplateField HeaderText="S no">
<ItemTemplate>
<%# Container.DataItemIndex+1 %>
<asp:HiddenField runat="server" ID="HdnFileID" Value='<%#
Eval("DocID") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="DocID" HeaderText="DocumentID" />
<asp:BoundField DataField="DocName" HeaderText="DocName" />
<asp:BoundField DataField="Uploadfile" HeaderText="File Name" />
<asp:BoundField DataField="DocType" HeaderText="Document" />
<asp:BoundField DataField="DepType" HeaderText="Department" />
<asp:TemplateField HeaderText="S no">
<ItemTemplate>
<asp:Button runat="server" Id="BtnApprove"
CommandName="_Approve"
CommandArgument='<%# Eval("DocID") %>' Text="Aprrove"
/>
<asp:Button runat="server" Id="Button1"
CommandName="_Reject"
CommandArgument='<%# Eval("DocID") %>' Text="Reject" />
</ItemTemplate>
</asp:TemplateField>
<asp:ButtonField Text="Button" />
</Columns>
</asp:GridView>
</div>
代码
if (e.CommandName == "_Approve")
{
//using (SqlConnection con = DataAccess.GetConnected())
using (SqlConnection con = new
SqlConnection(ConfigurationManager.ConnectionStrings
["mydms"].ConnectionString))
{
try
{
int rowindex = Convert.ToInt32(e.CommandArgument);
GridViewRow row = (GridViewRow)
((Control)e.CommandSource).NamingContainer;
LinkButton Prove_Button =
(LinkButton)row.FindControl("BtnApprove");
SqlCommand cmd = new SqlCommand("spinsertapprove", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@UserID", UserID));
cmd.Parameters.Add(new SqlParameter("@DocID", DocID));
cmd.Parameters.Add(new SqlParameter("@ApproveType", "Approve"));
int result = cmd.ExecuteNonQuery();
if (result != 0)
{
GrdFileApprove.DataBind();
}
}
catch
{
apfi.Text = "Not Approve";
}
finally
{
con.Close();
}
}
}
else if (e.CommandName == "_Reject")
{
using (SqlConnection con = new
SqlConnection(ConfigurationManager.ConnectionStrings
["mydms"].ConnectionString))
{
try
{
int rowindex = Convert.ToInt32(e.CommandArgument);
GridViewRow row = (GridViewRow)
((Control)e.CommandSource).NamingContainer;
LinkButton Prove_Button = (LinkButton)row.FindControl("Button1");
SqlCommand cmd = new SqlCommand("sprejectapprove", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@UserID",UserID));
cmd.Parameters.Add(new SqlParameter("@DocID", DocID));
cmd.Parameters.Add(new SqlParameter("@ApproveType", "Reject"));
int result = cmd.ExecuteNonQuery();
if (result != 0)
{
GrdFileApprove.DataBind();
}
}
catch
{
apfi.Text = "Rejct";
}
finally
{
con.Close();
}
}
}
它显示我在点击批准按钮
时出现错误答案 0 :(得分:1)
问题和解决方案应该非常简单。
在您的代码中,您将按钮转换为LinkButton
:
(LinkButton)row.FindControl("BtnApprove");
当你的html里面很清楚你使用常规按钮时:
<asp:Button runat="server" Id="BtnApprove"
CommandName="_Approve"
CommandArgument='<%# Eval("DocID") %>' Text="Aprrove"
/>
只需更改它就可以转换为Button
,而且一切都很好
(Button)row.FindControl("BtnApprove");
答案 1 :(得分:0)
首先,错误消息告诉你到底出了什么问题 - 它无法将其转换为LinkButton,因为它不是一个LinkButton,你使用了普通的Button。 / p>
其次,我不明白为什么你总是想要抓住按钮,更不用说投了它,因为你似乎根本就没有做任何事情。一旦你将它存储在你的Prove_Button变量中,你再也不会再触摸Prove_Button来做任何事了,所以首先没有必要这样做。
答案 2 :(得分:0)
var btnApprove = (Button)e.CommandSource;