首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在System.Web.UI.WebControls.GridView中转换ASP.NET类型的对象

无法在System.Web.UI.WebControls.GridView中转换ASP.NET类型的对象
EN

Stack Overflow用户
提问于 2012-01-18 23:59:44
回答 3查看 39.2K关注 0票数 7

我编写了一个方法,在单击“删除”按钮时删除asp.net Gridview中的行,并为单击“编辑”按钮编写另一种方法。Edit和Delete按钮都是内置的gridview控件的一部分。

但是,当我按下这些按钮(编辑/删除)并引发异常时。无法将“'System.Web.UI.WebControls.Button'.”类型的对象转换为指向行的类型

代码语言:javascript
运行
复制
Button btn = (Button)sender;

这里的问题是,这一行与编辑或删除方法都没有关联。它与另一列中的asp按钮有关,因此我迷路了。我怎样才能解决这个问题?是什么导致了OnRowDeleting和OnRowEditing与showResponses方法的冲突?

这是aspx

代码语言:javascript
运行
复制
<asp:GridView runat="server" ID="gvShowQuestionnaires" HeaderStyle-CssClass="table_header" CssClass="view" AlternatingRowStyle-CssClass="alt" AlternatingRowStyle-BackColor="#f3f4f8" AutoGenerateColumns="False" 
                DataKeyNames='QuestionnaireID' OnRowDeleting="gvShowQuestionnaires_RowDeleting" OnRowEditing="gvShowQuestionnaires_RowEdit" FooterStyle-CssClass="view_table_footer" OnRowCommand="showResponses"> 
    <Columns>
        <asp:BoundField DataField="QuestionnaireID" HeaderText="ID" HeaderStyle-Width="80px" ItemStyle-CssClass="bo"></asp:BoundField>
        <asp:BoundField DataField="QuestionnaireName" HeaderText="Questionnaire Name" />           
        <asp:TemplateField HeaderText="Results" HeaderStyle-Width="150px">
            <ItemTemplate>
               <asp:Button runat="server" ID="button1" CommandArgument='<%# Eval("QuestionnaireID") %>' OnClick="showResponses" text="Results"/>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField HeaderText="Options" ShowDeleteButton="True" ShowEditButton="true" EditText="Edit"></asp:CommandField>
    </Columns> 
</asp:GridView>

下面是代码:

代码语言:javascript
运行
复制
protected void gvShowQuestionnaires_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    int questionnaireID = (int)gvShowQuestionnaires.DataKeys[Convert.ToInt32(e.RowIndex)].Value;
    GetData.DeleteQuestionnaire(questionnaireID);
    gvShowQuestionnaires.DataSource = DT;
    gvShowQuestionnaires.DataBind();
}

protected void gvShowQuestionnaires_RowEdit(object sender, GridViewEditEventArgs e)
{
   string id = gvShowQuestionnaires.Rows[e.NewEditIndex].Cells[0].Text;
   Session["qID"] = id;
   Response.Redirect("~/members/edit_questionnaire.aspx");
}

protected void showResponses(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    string id = btn.CommandArgument.ToString();
    Session["qID"] = id;
    Response.Redirect("~/members/questionnaire_responses.aspx");            
}

任何帮助都会很感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-19 00:05:15

在我看来这是相当清楚的。在此:

代码语言:javascript
运行
复制
<asp:GridView runat="server" ... OnRowCommand="showResponses"> 

RowCommand事件绑定到showResponses。在这里,在showResponses中,假设发送者是一个按钮:

代码语言:javascript
运行
复制
protected void showResponses(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    string id = btn.CommandArgument.ToString();
    Session["qID"] = id;
    Response.Redirect("~/members/questionnaire_responses.aspx");            
}

发送者不是按钮,而是网格视图。如果要使用命令参数,则应该使用GridViewCommandEventArgs.CommandArgument

代码语言:javascript
运行
复制
protected void showResponses(object sender, GridViewCommandEventArgs e)
{
    Session["qID"] = e.CommandArgument;
    Response.Redirect("~/members/questionnaire_responses.aspx");            
}
票数 10
EN

Stack Overflow用户

发布于 2012-01-19 00:12:51

将CommandName属性添加到GridView中的button1中。

代码语言:javascript
运行
复制
<asp:Button runat="server" ID="button1" CommandName="Button1" CommandArgument='<%# Eval("QuestionnaireID") %>' OnClick="showResponses" text="Results"/>

那么在showResponses做这个..。

代码语言:javascript
运行
复制
protected void showResponses(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Button1") {
         Session["qID"] = e.CommandArgument;
         Response.Redirect("~/members/questionnaire_responses.aspx");
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-06-12 21:04:36

代码语言:javascript
运行
复制
var btnSender = (Button)e.CommandSource;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8919321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档