Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何在GridView中对按钮单击事件进行编码,该事件从GridView中的行返回值_Asp.net_Vb.net - Fatal编程技术网

Asp.net 如何在GridView中对按钮单击事件进行编码,该事件从GridView中的行返回值

Asp.net 如何在GridView中对按钮单击事件进行编码,该事件从GridView中的行返回值,asp.net,vb.net,Asp.net,Vb.net,为这个略显复杂的标题道歉 基本上,我有一个项目,我有一个数据库连接到它。我使用GridView显示数据库的一些内容,GridView已经启动并运行,但是我设计页面的方式是,我需要能够在每一行中单击一个按钮,这实际上是将行中一个单元格的值导出到一个子例程 我在谷歌上搜索了很多,并尝试了一些我在这里找到的相关东西,但是我找不到任何我想要的功能 相关代码如下 标记: <asp:GridView ID="Staffgv" runat="server" AutoGenerateColumns="fa

为这个略显复杂的标题道歉

基本上,我有一个项目,我有一个数据库连接到它。我使用GridView显示数据库的一些内容,GridView已经启动并运行,但是我设计页面的方式是,我需要能够在每一行中单击一个按钮,这实际上是将行中一个单元格的值导出到一个子例程

我在谷歌上搜索了很多,并尝试了一些我在这里找到的相关东西,但是我找不到任何我想要的功能

相关代码如下

标记:

<asp:GridView ID="Staffgv" runat="server" AutoGenerateColumns="false" OnRowCommand="Staffgv_RowCommand" AllowPaging="true" PageSize="20" OnPageIndexChanging="Staffgv_PageIndexChanging" BackColor="#f9f9f9" CssClass="gvStyle" >

   <Columns>

         <asp:TemplateField HeaderText="Start" InsertVisible="False" SortExpression="DateTimeStart">
                <HeaderStyle Width="70px"   CssClass="hdrGvStart"/>
                <ItemTemplate>

                         <asp:Label ID="lblDateTimeStart" runat="server" Text='<%# Bind("DateTimeStart", "{0:t}") %>'></asp:Label>

                </ItemTemplate>      

          </asp:TemplateField>

          <asp:TemplateField HeaderText="Finish" SortExpression="DateTimeEnd">
                 <HeaderStyle Width="70px"   CssClass="hdrGvFinish"/>
                 <ItemTemplate>

                         <asp:Label ID="lblDateTimeEnd" runat="server" Text='<%# Bind("DateTimeEnd", "{0:t}") %>'></asp:Label>

                 </ItemTemplate>

          </asp:TemplateField>

          <asp:TemplateField HeaderText="Forename" SortExpression="Forename">
                 <HeaderStyle Width="140px"  CssClass="hdrGvForename"/>
                 <ItemTemplate>

                         <asp:Label ID="lblForename" runat="server" Text='<%# Bind("Forename") %>'></asp:Label>

                 </ItemTemplate>               

          </asp:TemplateField>  

          <asp:TemplateField HeaderText="Surname" SortExpression="Surname">
                  <HeaderStyle Width="140px"   CssClass="hdrGvSurname"/>
                  <ItemTemplate>

                         <asp:Label ID="lblSurname" runat="server" Text='<%# Bind("Surname") %>'></asp:Label>

                  </ItemTemplate>               

          </asp:TemplateField>  

          <asp:TemplateField>
                  <HeaderStyle CssClass="gvHeaderEdit" />
                  <ItemTemplate>

                         <asp:Button ID="Btnapptid" runat="server" Text=""  CssClass="btnGVEdit"  CommandName="FillStaffTables" CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>"/>

                  </ItemTemplate>
          </asp:TemplateField>

     </Columns>
 </asp:GridView>
如果有人想要更多的代码,比如用来填充GridView的代码,我会发布,只是不想发布太多不相关的代码

谢谢

解决方案A 当单击按钮时,您只需要gridview行中的1个值。

您可以简单地使用按钮的
CommandArgument
Btnapptid
)。这假设在单击按钮时不需要gridview行索引。如果您确实需要,请参阅解决方案B,否则继续

首先,您需要在aspx页面中修改按钮的
CommandArgument

ASPX

<asp:Button ID="Btnapptid" runat="server" Text=""  CssClass="btnGVEdit"
    CommandName="FillStaffTables" CommandArgument='<%# Bind("AppointmentID") %>'/>

解决方案B 单击按钮时需要gridview行中的多个值时

请注意,此解决方案需要对您的终端进行一些更改

  • 创建一个附加控件(在gridview中),该控件应保存单击按钮时要获取的值
  • 用所需的值填充所述控件(通过UI中的
    Bind()
    或codebehind中的
    RowDataBound
  • 接下来,在
    row命令中
    可以借助
    index
    变量(来自您的示例)获取新创建的控件,如下所示

    例子 假设您决定创建一个
    HiddenField
    控件,用于存储数据库中的值

    ASPX(隐藏字段应该在gridview中的某个地方-就在
    Btnapptid
    下面就可以了)

    然后只需使用
    hfMyControl

    hfMyControl.Value
    

    您还可以使用多个控件重复所有这些操作,以便潜在地访问gridview中控件中存储的多个DB值。

    对于您的第一条评论,答案是肯定的,解决方案A是理想的。这也会导致更少的代码。关于你的第二条评论:我想知道
    hfMyControl
    一开始是否没有填充值。尝试将
    Dim hfMyControl行后面的断点设置为HiddenField=DirectCast(Staffgv.Rows(index).FindControl(“hfMyControl”),HiddenField)
    。检查1)变量
    hfMyControl
    不是
    Nothing
    和2)
    hfMyControl.Value
    中是否包含某些内容。当单击
    Btnapptid
    时,假设您想要
    AppointmentID
    是否正确?基于您正在查找
    appointid
    的假设,我编辑了解决方案A。它是仅仅基于此很难判断发生了什么,但这里有一些事情可以尝试:尝试将此添加到按钮
    使用submitbehavior=“False”
    如果不起作用,请撤消该更改,然后尝试将按钮翻转为
    链接按钮
    ,看看这是否有帮助。请参阅相关答案:&。确保如果将其翻转到
    链接按钮
    ,请在
    Text=”“
    部分中填写空字符串!如果这个文本属性像这样保持为空,我认为不会显示任何内容。
    If (e.CommandName = "FillStaffTables") Then
        txtAppointmentID.Text = e.CommandArgument
    End If
    
    Staffgv.Rows(index).FindControl("YOUR_CONTROLS_ID")
    
    <asp:HiddenField ID="hfMyControl" runat="server" Visible="False" 
        Value='<%# Bind("SOME_DB_COLUMN") %>'/>
    
    Dim hfMyControl As HiddenField = _
        DirectCast(Staffgv.Rows(index).FindControl("hfMyControl"), HiddenField)
    
    hfMyControl.Value