【问题标题】:Retrieving bound data from a Gridview从 Gridview 检索绑定数据
【发布时间】:2012-08-06 07:25:34
【问题描述】:

我有一个 Gridview 连接到显示数据的 SQL 数据源,我希望通过按钮和 Eval 检索与选定行关联的数据。

类似的,

<asp:LinkButton runat=server OnClientClick="RetrieveInfo" Text="Send" />

但我无法从代码中调用 Eval,我也不知道如何获取 DataKey。

我一直在网上搜索,但没有找到任何好的东西。谁能帮我?将不胜感激。

编辑:

<asp:GridView ID="GridView1" Width="100%" runat="server" AutoGenerateColumns="False"
DataKeyNames="ScheduleID" DataSourceID="SqlDataSource1">
    <Colums>
        <asp:TemplateField HeaderText="Date" SortExpression="Date">
           <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%#Eval("Date")%>' />
          </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Time" SortExpression="starttime">
           <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%#Eval("starttime")%>' />
          </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
           <ItemTemplate>
            <asp:LinkButton runat=server OnClientClick="RetrieveInfo" Text="Send" />
          </ItemTemplate>
        </asp:TemplateField>
    </Colums>
</asp:GridView>

略读,但基本上就是这样。

【问题讨论】:

  • 这个问题有点令人困惑。您能否为网格和链接按钮提供 HTML 标记?我的疑问是链接按钮在哪里。是在gridview里面还是gridview外面?
  • 感谢您的关注!我上传了更多细节。是的,按钮在里面。

标签: asp.net sql gridview eval


【解决方案1】:

希望对您有帮助

编辑您的 gridview html &lt;Colums&gt;&lt;/Columns&gt;

<asp:LinkButton runat=server OnClientClick="RetrieveInfo"   CommandName="Update"  Text="Send" />

Gridview Html

<asp:GridView ID="GridView1" Width="50%" runat="server" AutoGenerateColumns="False" 
            onrowcommand="GridView1_RowCommand" >
   <Columns>
        <asp:TemplateField HeaderText="Date" SortExpression="Date">
           <ItemTemplate>
            <asp:Label ID="lbldate" runat="server" Text='<%#Eval("Date")%>' />
          </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Time" SortExpression="starttime">
           <ItemTemplate>
            <asp:Label ID="lbltime" runat="server" Text='<%#Eval("starttime","{0:dd MMM yyyy}") %>' />
          </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
           <ItemTemplate>
            <asp:LinkButton runat="server" CommandName="sendvalue" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" OnClientClick="RetrieveInfo" Text="Send" />
          </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

代码隐藏:

     protected void Page_Load(object sender, EventArgs e)
       {
           bindGridview();
       }

   protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {

        if (e.CommandName == "sendvalue")
            {
                int getrow = Convert.ToInt32(e.CommandArgument);
                Label lbldate = (Label)GridView1.Rows[getrow].FindControl("lbldate");
                Label lbltime = (Label)GridView1.Rows[getrow].FindControl("lbltime");
                string getDate = lbldate.Text;
                string getStartTime = lbltime.Text;
               //here you retrieve all the value of select row and do your logic for link butn
                GridView1.EditIndex = -1;
                bindGridview();
            }
    }

    public void bindGridview()
    {
        SqlDataAdapter dap = new SqlDataAdapter("select Date,startTime from yourtable", con);
        DataSet ds = new DataSet();
        dap.Fill(ds);
        DataTable dt = ds.Tables[0];
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

【讨论】:

  • @Ravi:感谢您的观察,现在使用 GridView 标记检查更新
【解决方案2】:

从您的代码中,我觉得您需要在 Button OnClientClick 事件的 Javascript 函数调用中检索这些值。您可以在 GridView 的 RowDataBound 事件中为按钮的 onclick 事件设置 Javascript 函数中的值,并且可以轻松编写 javascript 函数来获取这些值...

代码隐藏:-

void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
 {

   if(e.Row.RowType == DataControlRowType.DataRow)
   {
    Label Label1 = (Label)e.Row.FindControl("Label1Id");                    
    Label Label2= (Label)e.Row.FindControl("Label2Id");
    Label Label3= (Label)e.Row.FindControl("Label3Id");
    LinkButton lnkBtn= (LinkButton)e.Row.FindControl("lnkId");
    lnkBtn.Attributes.Add("onclick","RetrieveInfo('"+Label1.Text+"','"+Label2.Text+"','"+Label3.Text+"')");
   }

  }

Javascript:

<script>
 function RetrieveInfo(Label1Value,Label2Value,Label3Value)
{
   Write your Logic..
}
</script>

【讨论】:

    【解决方案3】:

    如下更改您的网格视图。添加行数据绑定和行命令功能。 当您单击链接按钮时,将调用行命令函数。

    Default.aspx

    <asp:GridView ID="GridView1" Width="100%" runat="server" AutoGenerateColumns="False"
        DataKeyNames="ScheduleID" DataSourceID="SqlDataSource1" 
        OnRowDataBound = "GridView1_OnRowDataBound" 
        onrowcommand="GridView1_RowCommand" >
            <Colums>
                <asp:TemplateField HeaderText="Date" SortExpression="Date">
                   <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%#Eval("Date")%>' />
                  </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Time" SortExpression="starttime">
                   <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%#Eval("starttime")%>' />
                  </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                   <ItemTemplate>
                    <asp:LinkButton ID="lbBind" runat=server OnClientClick="RetrieveInfo" Text="Send" />
                  </ItemTemplate>
                </asp:TemplateField>
            </Colums>
        </asp:GridView>
    

    .cs 背后的代码:

    protected void  GridView1_OnRowDataBound(object sender, GridViewRowEventArgs e )
      {
         try
           { if (e.Row.RowType == DataControlRowType.DataRow)
               {
                 DataRowView drEachRow = (DataRowView)e.Row.DataItem;
                // Get all controls present in the row.
                LinkButton lbBind= (LinkButton )e.Row.FindControl("lbBind");
                // Add row index as command argument.
                lbBind.CommandArgument = e.Row.RowIndex.ToString();
                }
             }
               catch(Exception objExp)
                  {
                     // handle exception
                  }
                }
    
     protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
       {
          try
           {   // Check if the command is generated by a button only.
             if (e.CommandSource.GetType().Equals(new LinkButton().GetType()))
             {
                 int index;          // Store the index of the current row.
                 // Get it from CommandArgument
                 int.TryParse(Convert.ToString(e.CommandArgument), out index);
                // One exacmple of how to get one control in the same row.
               Label lblpid = (Label)gvFinalReview.Rows[index].FindControl("lblplanid");
              // You can get other controls similarly.
             }
           }
            catch(Exception objExp)
             {
                // handle exception
              }
        }
    

    【讨论】:

      猜你喜欢
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 2021-02-20
      • 2023-03-28
      相关资源
      最近更新 更多