iT邦幫忙

0

CommandArgument取值

  • 分享至 

  • xImage

大家好,
我現在P1.aspx.cs的Gridview已經從資料庫中撈出資料了,並且在P1中使用RowCommend的CommendName取得CommandArgument的參數並且Response.Redirect到P2.aspx的新Gridview中。
現在我想要在P2.aspx.cs中做另外一個RowCommend的編輯功能,但是卻不知道如何用QueryString拿到值後,要把它塞進P2的gridview某個欄位的CommandArgument,
有想過直接繫結上去,但卻跳出數據綁定:沒有包含名為'該欄位名稱'的屬性錯誤。
想請問一下如果我該如何在前端繫結就帶入QueryString的值,或是版上高手有什麼其他更正確的作法嗎?
謝謝

以下為我P2.aspx的程式碼:

            <asp:GridView ID="gv1" runat="server" OnRowCommand="gv1_RowCommand">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:Button ID="Edit" runat="server" Text="Edit" CommandName="Edit" CommandArgument='<%# Eval("Number")%>' />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

P2.aspx.cs:

  protected void gv1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Edit")
            {
                int Number = Convert.ToInt32(e.CommandArgument);
            }
        }
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
kw6732
iT邦研究生 5 級 ‧ 2022-09-26 16:40:51
最佳解答

我就直接用程式碼回應你了,請參考EditIt這段,在相關的Row內必須要置入HiddenField的Control,前面用 GridViewRow tr = (GridViewRow)(((Button)e.CommandSource).NamingContainer); 去帶入該Row,才能用FindControl去把資料帶出來,不論要幾個都可以:

protected void Adpe_RowCommand(object sender, GridViewCommandEventArgs e)
{
    GridViewRow tr = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
    GridView gv = adipt_gv;
    DataTable dt01 = new DataTable();

    if (e.CommandName == "EditIt")
    {
        int d_id = 0;
        if(int.TryParse(((HiddenField)tr.FindControl("Data")).Value, out d_id))
        {
            EditIt(d_id);
        }
        else
        {
            Dialog("訊息", d_id+"無資料可編輯。");
            return;
        }
    }

    if (e.CommandName == "Batch_Del")
    {
        dt01 = adpitsDtb(gv);
        DataTable v2 = new DataTable();
        DataRow[] dr = dt01.Select("sel1 = false");
        if (dr.Length == 0)
        {
            gv.DataSource = null;
            gv.DataBind();
            Dialog("訊息", "全部資料刪除。");
            amt_s.Text = "0";
            return;
        }
        v2 = dr.CopyToDataTable();
        if (v2.Rows.Count == 0)
        {
            Dialog("訊息","無任何選取,無法批次刪除。");
            return;
        }
        gv.DataSource = v2;
        gv.DataBind();
    }
    
}
看更多先前的回應...收起先前的回應...
sa851416 iT邦新手 5 級 ‧ 2022-09-26 16:49:24 檢舉

kw哥!!
想問一下
if(int.TryParse(((HiddenField)tr.FindControl("Data")).Value, out d_id))
這邊的(HiddenField)tr是什麼意思QQ

sa851416 iT邦新手 5 級 ‧ 2022-09-26 16:51:33 檢舉

喔喔我好像有點懂了,我來試試看!

kw6732 iT邦研究生 5 級 ‧ 2022-09-26 17:21:57 檢舉

這樣子做。

<asp:GridView ID="gv1" runat="server" OnRowCommand="gv1_RowCommand">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:Button ID="Edit" runat="server" Text="Edit" CommandName="Edit" CommandArgument='<%# Eval("Number")%>' />
                            <asp:HiddenField ID="Data" Value='<%# Eval("Number") %>' runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
kw6732 iT邦研究生 5 級 ‧ 2022-09-26 17:32:23 檢舉

if(int.TryParse(((HiddenField)tr.FindControl("Data")).Value, out d_id))
這邊的(HiddenField)tr
https://ithelp.ithome.com.tw/upload/images/20220926/20124014IPqeF9hOYH.png

kw6732 iT邦研究生 5 級 ‧ 2022-09-26 17:34:48 檢舉
  1. (HiddenField) : 轉換型態。
  2. tr : GridViewRow。
  3. FindControl : 尋找控制項。
  4. int.TryParse : 轉換成 int。

int.TryParse(((HiddenField)tr.FindControl("Data")).Value, out d_id)

sa851416 iT邦新手 5 級 ‧ 2022-09-27 09:10:15 檢舉

謝謝kw哥! 非常清楚! (已私)

我要發表回答

立即登入回答