0

私は 1 つの友達リクエスト フォームを持っています。その中で、グリッド ビュー コントロールを使用してすべての登録メンバーを表示しているので、リクエストを送信したい人はリクエストを送信できます。私のフォーム デザイン コードは次のとおりです。

enter code here

<asp:GridView ID="grdviewFriendRequest" runat="server" AllowPaging="true"     AutoGenerateColumns="false"
EmptyDataText="No members found" Width="100%" Font-Size="16px" ForeColor="#FF9F00"
GridLines="None" PagerSettings-Mode="NumericFirstLast" 
onselectedindexchanged="grdviewFriendRequest_SelectedIndexChanged">
<FooterStyle BackColor="#FFB100" Font-Bold="true" ForeColor="#000000" />
<RowStyle BackColor="#FFD340" />
<EditRowStyle BackColor="#FFDE40" />
<SelectedRowStyle BackColor="#FFC900" Font-Bold="True" ForeColor="#000000" />
<PagerStyle BackColor="#FFEB73" ForeColor="Black" HorizontalAlign="Center" />
<HeaderStyle BackColor="#FFB100" Font-Bold="True" ForeColor="000000"   HorizontalAlign="Left" />
<AlternatingRowStyle BackColor="#FFDF73" />
<Columns>
<asp:TemplateField HeaderText="First Name">
<ItemTemplate>
<%#Eval("firstName")%></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Last Name">
<ItemTemplate>
<%#Eval("lastName")%></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Send Friend Request">
<ItemTemplate>
<asp:Button ID="btnSendFrndReq" CssClass="btnImage" Text="Send Friend Request"    runat="server" OnClick="btnSendFrndReq_Click" /></ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

したがって、ユーザーが特定のメンバーの名前の前にあるボタンをクリックすると、その行のデータがテーブルに格納されるようにしたいと考えています。

ボタンクリックイベントでこれを試しましたが、うまくいきません。何が問題なのかを見つけることができません。コードビハインドを提供します。確認して、解決策を提案してください

protected void grdviewFriendRequest_SelectedIndexChanged(object sender, EventArgs e)
{

}
public void btnSendFrndReq_Click(object sender, EventArgs e)
{
string fname = "", lname = "";
GridViewRow row = grdviewFriendRequest.SelectedRow;
fname = row.Cells[0].Text;
lname = row.Cells[1].Text;
Int32 frmCandiid = (Int32)(Session["candiID"]);
InsertRegistation frndRq= new InsertRegistation();
Session["candID"] =frndRq.FrndReqGetCandiid(fname, lname);
Int32 toCandiid = (Int32)(Session["candID"]);
frndRq.InsertFrndReq(0, frmCandiid, toCandiid, DateTime.Now);


}

しかし、これを試した後、つまり

enter code here

protected void grdviewFriendRequest_RowCommand(object sender, GridViewCommandEventArgs   e)
{
if (e.CommandName == "SendFriendReq")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = grdviewFriendRequest.Rows[index];
string fname = "", lname = "";

fname = row.Cells[0].Text;
lname = row.Cells[1].Text;
Int32 frmCandiid = (Int32)(Session["candiID"]);
InsertRegistation frndRq = new InsertRegistation();
Session["candID"] = frndRq.FrndReqGetCandiid(fname, lname);
Int32 toCandiid = (Int32)(Session["candID"]);
frndRq.InsertFrndReq(0, frmCandiid, toCandiid, DateTime.Now);
}

}

入力文字列が正しい形式ではないというエラーが表示されます。

次に、commandArgument プロパティを指定しようとしましたが、それでも値 0 が返されます。

<asp:TemplateField HeaderText="Send Friend Request">
<ItemTemplate>
<asp:Button ID="btnSendFrndReq" CssClass="btnImage" Text="Send Friend Request"   runat="server" CommandName="SendFriendReq" CommandArgument="<%# Container.DataItemIndex %>"   /></ItemTemplate>
</asp:TemplateField>

また、コマンド引数に指定する値を教えてください。

それで、私は今何ができますか?

4

1 に答える 1

0

実際にコマンド引数が必要なようには見えません。
必要なのは、クリックされたボタンがあった行を見つけることです。

そして、ボタン (コントロール) プロパティの NamingContainer を使用してこれを行うことができます。

var MyRow = (GridViewRow)((Control)sender).NamingContainer;

var usefullTextBox = (TextBox)MyRow.FindControl("usefullTextBox"); // Yes, the name is made up.

....


DoWhatYouWant(usefullTextBox.Value);
于 2013-06-13T12:24:20.100 に答える