如何在 c# ASP.NET 中使用 GridView_RowCommand 事件从 GridView 获取图像

Posted

技术标签:

【中文标题】如何在 c# ASP.NET 中使用 GridView_RowCommand 事件从 GridView 获取图像【英文标题】:How to get image from GridView using GridView_RowCommand event in c# ASP.NET 【发布时间】:2015-06-28 11:32:57 【问题描述】:

我正在使用 c# ASP.NET 在 GridView 内进行编辑操作。当用户单击编辑按钮时,我需要从该行检索所有数据并显示在文本框中,但这里我无法显示图像。我正在解释下面是我的代码。

faq.aspx:

<div class="row">
    <div class="col-md-6">
        <label for="question" accesskey="T"><span class="required">*</span> Question</label>
        <asp:TextBox ID="TextBox1" runat="server"  size="30" value="" name="question" ></asp:TextBox>
        <div id="noty" style="display:none;" runat="server"></div>
        <label for="answer" accesskey="A"><span class="required">*</span> Answer</label>
        <asp:TextBox ID="TextBox2" runat="server"  size="30" value="" name="answer" ></asp:TextBox>
        <div id="Div1" style="display:none;" runat="server"></div>
    </div>
    <div class="col-md-6 bannerimagefile">
        <label for="insertimage" accesskey="B"><span class="required">*</span> Insert Image</label>
        <asp:FileUpload runat="server" class="filestyle" data-size="lg" name="insertimage" id="FileUpload1" onchange="previewFile()" />
        <label for="bannerimage" accesskey="V"><span class="required">*</span> View Image</label>
        <div style="padding-bottom:10px;">
            <asp:Image ID="Image3" runat="server" border="0" name="bannerimage" style="width:70px; height:70px;"   />
        </div>
        <div class="clear"></div>
        <asp:Button ID="Button1" runat="server" Text="Submit" class="submit" 
            onclick="Button1_Click" />
        </div>
</div>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" Width="100%" CssClass="table table-striped table-bordered margin-top-zero" OnRowCommand="GridView1_RowCommand" >
    <Columns>
       <asp:TemplateField HeaderText="Sl No">
       <ItemTemplate>
       <asp:Label ID="faqid" runat="server" Text='<%#Eval("FAQ_ID") %>'></asp:Label>
       </ItemTemplate>
       </asp:TemplateField>
       <asp:TemplateField HeaderText="Question" >
       <ItemTemplate>
       <asp:Label ID="question" runat="server" Text='<%#Eval("Question") %>'></asp:Label>
       </ItemTemplate>
       </asp:TemplateField>
       <asp:TemplateField HeaderText="Answer" >
       <ItemTemplate>
       <asp:Label ID="answer" runat="server" Text='<%#Eval("Answer") %>'></asp:Label>
       </ItemTemplate>
       </asp:TemplateField>
       <asp:TemplateField HeaderText="Image" >
       <ItemTemplate>
       <asp:Image ID="Image1" runat="server" border="0" name="bannerimage" style="width:70px; height:70px;" ImageUrl='<%# "/Upload/" + Convert.ToString(Eval("Image")) %>'  /> 
       </ItemTemplate>
       </asp:TemplateField>
       <asp:TemplateField HeaderText="Action" >
       <ItemTemplate>
       <!--<a href="" data-toggle="tooltip" title="" class="btn btn-xs btn-success" data-original-title="Edit" id="editbtn" ><i class="fa fa-edit"></i></a>
       <a href=" " data-toggle="tooltip" title="" class="btn btn-xs btn-danger" data-original-title="Delete"><i class="fa fa-times"></i></a> -->
            <asp:HyperLink ID="HyperLink1" runat="server" data-toggle="tooltip" title="" class="btn btn-xs btn-success" data-original-title="Edit" CommandName="DoEdit" CommandArgument='<%# Eval("FAQ_ID") %>' ><i class="fa fa-edit"></i></asp:HyperLink>
             <asp:HyperLink ID="HyperLink2" runat="server" data-toggle="tooltip" title="" class="btn btn-xs btn-danger" data-original-title="Delete" CommandName="DoDelete" CommandArgument='<%# Eval("FAQ_ID") %>' ><i class="fa fa-times"></i></asp:HyperLink>
           </ItemTemplate>
       </asp:TemplateField>
    </Columns>
</asp:GridView>

faq.aspx.cs:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)

    int faqID = int.Parse(e.CommandArgument.ToString());
    switch (e.CommandName)
    
        case "doEdit":
            
                int index = Convert.ToInt32(e.CommandArgument);
                TextBox1.Text = GridView1.Rows[index].Cells[1].Text;
                TextBox2.Text = GridView1.Rows[index].Cells[2].Text;
                HiddenField1.Value = GridView1.Rows[index].Cells[0].Text;
                Image3.ImageUrl=
                Button1.Text = "Update";
            
    

在这里我需要图像将被检索并设置为image3 id。请帮我解决这个问题。

【问题讨论】:

您是否尝试过使用“FindControl”? ***.com/questions/1965835/…?您将获得图像控件,并从那里您应该能够获得其 URL 【参考方案1】:

这里是 image3;它不在您的 sn-p 中。请包括它,但如果它在网格中,那么你可以这样做:

var img3 = (Image)GridView1.Rows[index].Cells[X].FindControl("Image3");
img3.ImageUrl = "XYZ";

直接引用仅在容器外部的页面上有效。如果在容器内,则必须使用 FindControl(例如 detailsview.findcontrol),或者如果是可重复列表,则必须从行(或者在网格的情况下,单元格)中使用 FindControl。

【讨论】:

@Brian : 我已经添加你现在可以查看我的帖子了。 应该可以直接参考image3。确保 image3 在设计器文件中。 @Brian:另一个问题我现在无法使用OnRowCommand事件获取任何数据,你能找到解决方案吗? RowCommand 在初始绑定时只有绑定数据。回发后,行的数据项为空。【参考方案2】:

这样获取行索引:

 GridViewRow gvr = (GridViewRow)(((HyperLink)e.CommandSource).NamingContainer);

    int index= gvr.RowIndex; 

//获取图片地址

 string url =  ((Image)gvr.FindControl("Image3")).ImageUrl;    
    Image3.ImageUrl= url;

【讨论】:

以上是关于如何在 c# ASP.NET 中使用 GridView_RowCommand 事件从 GridView 获取图像的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 在 ASP.NET 中使用 MySql 数据库 [重复]

如何使用c#在asp.net网页中显示C程序错误

如何使用 c# 在 asp.net 中隐藏和显示警报

如何在 c# asp.net 中使用完整的日历

如何使用 C# 和 ASP.NET 从网页中截取 div?

如何使用 HttpClient 在 ASP.Net C# 中禁用分块传输编码