如何在 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 获取图像的主要内容,如果未能解决你的问题,请参考以下文章