QA@IT
«質問へ戻る

質問を投稿

asp.netで簡単なアプリを作成しています。gridviewで表示した表のCellの値を取得する方法を教えてください。

vs2012,c#,win8で開発しています。
ページをLoad時に下のコードでgridviewに表を作成しています。

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("記事", typeof(string)));
var db = new DataClasses1DataContext(ss);

   var query = from n in db.記事
               select n;
            foreach (var m in query)
            {
                DataRow row = dt.NewRow();
                row["記事"] = "・" + m.記事タイトル.ToString();

                dt.Rows.Add(row);
            }


            this.GridView1.DataSource = dt;
            this.GridView1.DataBind(); 

gridviewで作成された表の中にあるCellをクリックすると下のコードでページに飛ぶように設定しました。

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
 {

   string Location = ResolveUrl("記事詳細投稿.aspx");
   e.Row.Attributes["onClick"] = string.Format("javascript:window.location='{0}';", Location);
   e.Row.Style["cursor"] = "pointer";
  }

ここで、質問です。griewviewで作成された表をクリック時にクリックしたCellの値を取得したいのですが、どのように書いたらよいのでしょうか。
上のコードに

string dd = GridView1.SelectedDataKey.Values[0].ToString();

のコードを記載したのが下のコードになります。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
 {

   string Location = ResolveUrl("記事詳細投稿.aspx");
   e.Row.Attributes["onClick"] = string.Format("javascript:window.location='{0}';", Location);
   e.Row.Style["cursor"] = "pointer";

   string dd = GridView1.SelectedDataKey.Values[0].ToString();
   //ここでcellの値が取得できるのでは。
  }

これを実行すると、DataKeyNamesのプロパティを設定してくださいと表示されました。
そこで、
.csに

public virtual string[] DataKeyNames { get; set; }

.aspxに

 <asp:GridView ID="GridView1" runat="server" ShowHeader="False" GridLines="None" OnRowDataBound="GridView1_RowDataBound" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" DataKeyNames="記事">
    ↑
//ここに設定
</asp:GridView>

という感じで設定してみたのですが、うまくいきません。どのようにすればいいのか教えてください。お願いします。

vs2012,c#,win8で開発しています。
ページをLoad時に下のコードでgridviewに表を作成しています。
```
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("記事", typeof(string)));
var db = new DataClasses1DataContext(ss);

   var query = from n in db.記事
               select n;
            foreach (var m in query)
            {
                DataRow row = dt.NewRow();
                row["記事"] = "・" + m.記事タイトル.ToString();

                dt.Rows.Add(row);
            }

 
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind(); 
```
gridviewで作成された表の中にあるCellをクリックすると下のコードでページに飛ぶように設定しました。

```
 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
 {
 
   string Location = ResolveUrl("記事詳細投稿.aspx");
   e.Row.Attributes["onClick"] = string.Format("javascript:window.location='{0}';", Location);
   e.Row.Style["cursor"] = "pointer";
  }
```

ここで、質問です。griewviewで作成された表をクリック時にクリックしたCellの値を取得したいのですが、どのように書いたらよいのでしょうか。
上のコードに
```
string dd = GridView1.SelectedDataKey.Values[0].ToString();
```
のコードを記載したのが下のコードになります。
```
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
 {
 
   string Location = ResolveUrl("記事詳細投稿.aspx");
   e.Row.Attributes["onClick"] = string.Format("javascript:window.location='{0}';", Location);
   e.Row.Style["cursor"] = "pointer";
   
   string dd = GridView1.SelectedDataKey.Values[0].ToString();
   //ここでcellの値が取得できるのでは。
  }
```
これを実行すると、DataKeyNamesのプロパティを設定してくださいと表示されました。
そこで、
.csに
```
public virtual string[] DataKeyNames { get; set; }
```
.aspxに
```
 <asp:GridView ID="GridView1" runat="server" ShowHeader="False" GridLines="None" OnRowDataBound="GridView1_RowDataBound" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" DataKeyNames="記事">
    ↑
//ここに設定
</asp:GridView>
```
という感じで設定してみたのですが、うまくいきません。どのようにすればいいのか教えてください。お願いします。