私はこの答えに従おうとしてきました:選択ボタンなしで GridView で全行選択を実装する方法は?
しかし、私はまだ少し混乱しています。その質問に従った後、私の行はクリック可能になりました。しかし、クリックされた後に何かを実行するにはどうすればよいでしょうか? 現在、ボタンを使用して、行ごとにデータベースに必要なことを行います。
.aspx コードは次のとおりです。
<Columns>
<asp:ButtonField Text = "Click Me" CommandName = "Clicked" ButtonType = "Button" />
...other columns stuff
</Columns>
C# コード ビハインド:
protected void RowCommand(object sender, GridViewCommandEventArgs e)
{
//if button is clicked
if (e.CommandName == "Clicked")
{
//go find the index on the gridview
int selectedIndex = MsgInbox.SelectedIndex;
if (int.TryParse(e.CommandArgument.ToString(), out selectedIndex))
{
//do something with database
}
今では美しく機能します。ただし、ボタンをクリック可能にするのではなく、行全体をクリック可能にしたいのです。私はこれが現在間違っていることを知っていますが、これは私がこれまでに持っているコードです:
.aspx コード
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="SelectRow" runat="server" ForeColor="red" CommandName="Clicked"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
C# コード:
protected void Gridview_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes["onmouseover"] = "this.style.cursor='pointer';this.style.textDecoration='underline';";
e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';";
var selectButton = e.Row.FindControl("SelectRow") as Button;
e.Row.Attributes["onclick"] = ClientScript.GetPostBackEventReference(selectButton, "");
これを行うと単純なヌル ポインター例外が発生しますが、e.Row.Attributes に詳しくないため、これがどこで失敗しているのか、データベース ロジックを追加するために何をする必要があるのか 本当にわかりません。
ありがとう