6

データを表示する SQL データソースに接続された Gridview があり、ボタンと 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>

スキミングされていますが、基本的にはそれだけです。

4

3 に答える 3

3

これが役に立ちますように

gridview html<Colums> を編集して</Columns>

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

グリッドビュー 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();
    }
于 2012-08-09T06:07:13.463 に答える
0

あなたのコードから、Button OnClientClick イベントの 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>
于 2012-08-09T06:26:30.380 に答える
0

次のようにグリッド ビューを変更します。行データバウンドおよび行コマンド機能を追加します。リンクボタンをクリックすると、行コマンド関数が呼び出されます。

デフォルト.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
          }
    }
于 2012-08-09T06:34:56.130 に答える