0

少し説明が必要な質問があるので、できるだけ明確にしようと思います。私はいくつかのWebページで作業しています。1つ(CustomerListPage)GridViewを介して顧客のリストを取得します。顧客を選択すると次のページへのリンクになるように、行をクリック可能にしました。ユーザーが顧客をクリックすると、次のページ(CustomerUsePage)に移動します。このページは、私が作成したラベルの1つでクリックされた顧客の名前と、残りのラベルのその他の情報(顧客ID、通り、都市など)を表示することを想定しています。これは私のCustomerListPageのコードです:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
   GridViewRow row = GridView1.SelectedRow;

   if (GridView1.SelectedRow.RowIndex == 0)
   {
       //string selectedUser = GridView1.SelectedRow.Cells[0].ToString();
       Response.Redirect("CustomerUsePage.aspx?Customer_ID=" );
       BindGridview();
   }

   if (GridView1.SelectedRow.RowIndex == 3)
   {
       //string selectedUser = GridView1.SelectedRow.Cells[0].ToString();
       Response.Redirect("CustomerUsePage.aspx?Customer_ID=");
       BindGridview();
   }

}

CustomerUsePageのコードは次のとおりです。

protected void Page_Load(object sender, EventArgs e)
{
    string v = Request.QueryString["Customer_ID"];
    Response.Write(v);

    if (!IsPostBack)
    {
        BindControlvalues();    
    }
}

private void BindControlvalues()
{        
    con.Open();
    SqlCommand cmd = new SqlCommand(" sql query ", con);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    con.Close();
    DataSet ds = new DataSet();
    da.Fill(ds);
    Label5.Text = ds.Tables[0].Rows[3][8].ToString();
    Label4.Text = ds.Tables[0].Rows[3][0].ToString();
    Label1.Text = ds.Tables[0].Rows[3][1].ToString();
    Label2.Text = ds.Tables[0].Rows[3][3].ToString();
    Label3.Text = ds.Tables[0].Rows[3][5].ToString();          
}

ご覧のとおり、これらのデータにインデックスを付けることで、クエリから受け取ったデータをラベルに入力しています。私はそれを避けてより効率的な方法を使いたいと思いますが、今のところはうまくいきます。さらに重要なことに、クリックした顧客に基づいてラベルにデータを入力する方法はありますか?今のところ、任意の顧客をクリックすると同じ結果が得られます。「行インデックス=0を選択した場合」という線に沿って何かを考えていましたが、このページにはGridViewが存在しないため、これは機能しないことがわかっています。しかし、ロジックは私が欲しいものです。何か助けはありますか?ありがとう。

4

2 に答える 2

0

使用することをお勧めしますRowCommand event

void GridView_RowCommand(Object sender, GridViewCommandEventArgs e)
  {
    if(e.CommandName=="Select")
    {
            var label = (Label)e.Item.FindControl("YourLabelId");
            var value = label.Text;
            Response.Redirect("CustomerUsePage.aspx?Customer_ID=" +value);

    }
  }

Aspx

<asp:gridview onrowcommand="GridView_RowCommand"/>

そして、イベントを発生させる列を追加します

<columns>
                <asp:buttonfield buttontype="Link" 
                  commandname="Select" 
                  text="Select"/>

               <asp:templatefield headertext="Author Name">
                 <itemtemplate>
                     <asp:label id="YourLabelId" Text= '<%# Eval("Customer_ID") %>' runat="server"/>
                 </itemtemplate>
                </asp:templatefield>
</columns>
于 2012-10-11T17:58:02.827 に答える
0

itemtemplates と hyperlink オブジェクトを使用します。これ以上必要な場合はお知らせください。

これがサンプルです。

そのサイトからの貼り付けは次のとおりです。

ポストバック方法:

<asp:TemplateField HeaderText="The Column header ">
    <ItemTemplate>
        <asp:HyperLink runat="server" id="MyLink"   
            Text="<%# Eval("ProjectName") %>"  
            NavigateUrl='Project.aspx?ProjectID=<%# Eval("DatasourceField") %>'>
        </asp:HyperLink>
    </ItemTemplate>
</asp:TemplateField>

非ポストバック:

<asp:TemplateField HeaderText="The Column header ">
    <ItemTemplate>
        <a href='Project.aspx?ProjectID=<%# Eval("DatasourceField") %>'>
            <%# Eval("ProjectName") %> 
        </a>
    </ItemTemplate>
</asp:TemplateField>
于 2012-10-11T18:10:28.723 に答える