无法将“System.Web.UI.WebControls.Button”类型的对象强制转换为“System.Web.UI.WebControls.LinkBut​​ton”类型

时间:2013-10-01 07:38:02

标签: c# asp.net html5

我尝试批准文件 但是当我点击批准按钮时 它告诉我错误

  

无法将“System.Web.UI.WebControls.Button”类型的对象强制转换为“System.Web.UI.WebControls.LinkBut​​ton”。

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();
                }
            }
        }

它显示我在点击批准按钮

时出现错误

3 个答案:

答案 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)

首先,错误消息告诉你到底出了什么问题 - 它无法将其转换为LinkBut​​ton,因为它不是一个LinkBut​​ton,你使用了普通的Button。 / p>

其次,我不明白为什么你总是想要抓住按钮,更不用说投了它,因为你似乎根本就没有做任何事情。一旦你将它存储在你的Prove_Button变量中,你再也不会再触摸Prove_Button来做任何事了,所以首先没有必要这样做。

答案 2 :(得分:0)

var btnApprove = (Button)e.CommandSource;
相关问题