質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

3342閲覧

IDの非表示での値を取得

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2017/06/27 11:08

編集2017/06/27 12:05

こんばんは。質問です
GridViewにIDを表示しているのですがこれを非表示にして値が取れるようにしたいのですがやり方が調べてもわかりません。

namespace

1 public partial class ToDo_control : System.Web.UI.Page 2 { 3 protected void Page_Load(object sender, EventArgs e) 4 { 5 if (!IsPostBack) 6 { 7 8 mitilyakusilu.Checked = true; 9 10 sikakari.Checked = true; 11 12 kanrilyou.Checked = true; 13 14 Dictionary<string, string> item = new Dictionary<string, string>(); 15 item["C01"] = "打合わせ"; 16 item["C02"] = "資料作成"; 17 item["C03"] = "プログラム"; 18 item["C04"] = "テスト"; 19 item["C05"] = "その他"; 20 item["C06"] = "プライベート"; 21 22 Ddl.DataSource = item; 23 Ddl.DataTextField = "Value"; 24 Ddl.DataValueField = "Key"; 25 Ddl.DataBind(); 26 Ddl.Items.Insert(0, ""); 27 28 29 DataTable dt = new DataTable(); 30 //空の DataTableを作成 31 dt.Columns.Add("Id", typeof(String)); 32 dt.Columns.Add("Staus", typeof(String)); 33 dt.Columns.Add("CategoryCode", typeof(String)); 34 dt.Columns.Add("StartDate", typeof(String)); 35 dt.Columns.Add("EndDate", typeof(String)); 36 dt.Columns.Add("ToDo", typeof(String)); 37 GridView.DataSource = dt; 38 GridView.DataBind(); 39 } 40 } 41 42 protected void Registration_Click(object sender, EventArgs e) 43 { 44 Response.Redirect("ToDo_Editing.aspx"); 45 } 46 47 protected void Editing_Click(object sender, EventArgs e) 48 { 49 Response.Redirect("ToDo_Editing.aspx"); 50 } 51 52 protected void search_Click(object sender, EventArgs e) 53 { 54 string connectionString = ConfigurationManager.ConnectionStrings["SQLServer"].ConnectionString; 55 56 using (var connection = new SqlConnection(connectionString)) 57 using (var command = connection.CreateCommand()) 58 { 59 try 60 { 61 62 //データベースの接続開始 63 connection.Open(); 64 65 //実行するSQLの準備 66 String sql = @"SELECT ID,Status,CategoryCode,Code,Name,ToDo,StartDate,EndDate, 67 Checked = CASE Status 68 WHEN '1' THEN '未着手' 69 WHEN '2' THEN '仕掛' 70 WHEN '3' THEN '完了' 71 END 72 FROM ToDoYamamoto INNER JOIN CategoryYamamoto 73 ON ToDoYamamoto.CategoryCode = CategoryYamamoto.Code 74 WHERE 1 = 1"; 75 //未着手のチェックボックスにチェックが入っているか 76 bool flg = true; 77 if (mitilyakusilu.Checked) 78 { 79 sql = sql + " AND Status = '1' "; 80 flg = false; 81 } 82 83 //仕掛のチェックボックスにチェックが入っているとき 84 if (sikakari.Checked) 85 { 86 87 if(flg == true) 88 { 89 sql += " AND"; 90 } 91 else 92 { 93 sql += " OR"; 94 } 95 sql += " Status = '2'"; 96 flg = false; 97 } 98 99 //完了のチェックボックスにチェックが入っているとき 100 if (kanrilyou.Checked) 101 { 102 103 if(flg == true) 104 { 105 sql += " AND"; 106 } 107 else 108 { 109 sql += " OR"; 110 } 111 sql += " Status = '3'"; 112 flg = false; 113 } 114 115 //カテゴリが選択されているとき 116 if (Ddl.SelectedValue != "") 117 { 118 sql = sql + " AND CategoryCode = @CategoryCode"; 119 command.Parameters.Add(new SqlParameter("@CategoryCode", Ddl.SelectedValue)); 120 } 121 122 //開始予定日が入力されているとき 123 if (StartFrom.Text != "") 124 { 125 sql = sql + " AND StartDate >= @StartFrom"; 126 command.Parameters.Add(new SqlParameter("@StartFrom", StartFrom.Text)); 127 } 128 129 //開始予定日が入力されているとき 130 if (StartTo.Text != "") 131 { 132 sql = sql + " AND StartDate <= @StartTo"; 133 command.Parameters.Add(new SqlParameter("@StartTo", StartTo.Text)); 134 } 135 136 //完了予定日が入力されているとき 137 if (CompletionFrom.Text != "") 138 { 139 sql = sql + " AND EndDate >= @CompletionFrom"; 140 command.Parameters.Add(new SqlParameter("@CompletionFrom", CompletionFrom.Text)); 141 } 142 143 //完了予定日が入力されているとき 144 if (CompletionTo.Text != "") 145 { 146 sql = sql + " AND EndDate<= @CompletionTo"; 147 command.Parameters.Add(new SqlParameter("@CompletionTo", CompletionFrom.Text)); 148 } 149 150 sql = sql + " ORDER BY Status, CategoryCode, StartDate, EndDate, ToDo"; 151 //実行 152 command.CommandText = sql; 153 154 155 var adapter = new SqlDataAdapter(command); 156 157 //取得結果を格納する 158 var table = new DataTable(); 159 160 //データの取得 161 adapter.Fill(table); 162 163 GridView.DataSource = table; 164 GridView.DataBind(); 165 } 166 167 finally 168 { 169 //データベースの接続終了 170 connection.Close(); 171 } 172 } 173 } 174 175 } 176} 177コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattn

2017/06/27 11:10

ボールドテキスト誰w コードはコードブロックを使って下さい。(今からでも修正可能です)
退会済みユーザー

退会済みユーザー

2017/06/27 11:23

質問内容に関係ないコードが多々アップされてますが、関係ない部分は削除してください。他人に見てもらうために、見やすくするという配慮をお願いします。
退会済みユーザー

退会済みユーザー

2017/06/27 11:28

また、何の値を取るのか不明です。きちんと書いてください。一度 https://teratail.com/help/question-tips を読むことをお勧めします。それにも書いてありますが "人に質問をするには、自分が何を尋ねたいかを知っている必要があります。これは、「自分が今『何がわからないのか』がわかっていて、言語化できている」ということです" が不十分です。なので、今は "何がわからないかわからない人から質問を受けても、答える側も困ってしまいます" という状況です。
退会済みユーザー

退会済みユーザー

2017/06/27 11:41

DBから追加された順に連番が振られていてGridViewのIDというカラムに表示しているのですがそのIDを非表示にしても値が取れるようにしたいです。GridViewのプロパティから非表示にすると値も取れなくなると聞きました。
退会済みユーザー

退会済みユーザー

2017/06/27 11:45

必要のないコードは削除してほしいとお願いしているのにそれはやる気なしですか? 質問者さんの言われる「値を取る」というのが私には意味不明なのですが、そこをきちんと説明していただけないのですか?
退会済みユーザー

退会済みユーザー

2017/06/27 11:48

お願いしたことにはきちんと対応していただけないと、こちらも対応が難しいことをご理解ください。
退会済みユーザー

退会済みユーザー

2017/06/27 11:54

すみません、対応してないつもりはないのですが、必要の無いコードがどこかわからなくて・・・
退会済みユーザー

退会済みユーザー

2017/06/27 12:18

じゃあ、もう、コードの削除はいいので、質問者さんの言われる「値を取る」というのがどういう意味かをきちんと書いてください。すみませんが、自分は技術的な話以前に、日本語として理解できないです。
退会済みユーザー

退会済みユーザー

2017/06/27 12:27

困らしてしまいすいません、現在DBにあるデータをGridViewに表示しているのですがIDが追加された順番に連番を振ってくれるように設定しています。そのIDをGridViewに表示したときこれを非表示にしたいのです。しかしGridViewで非表示にすると値を参照することが出来なくなるので値が参照できる状態で非表示にする方法があるらしいのですがそのやり方がわからない状態です
退会済みユーザー

退会済みユーザー

2017/06/27 12:44

「IDが追加された順番に連番を振ってくれるように設定」⇒「SQL Server のテーブルで ID は int 型 IDENTITY の主キー」、「IDをGridViewに表示したときこれを非表示にしたい」⇒「ID は GridView に表示したくない」、「GridViewで非表示にすると値を参照することが出来なくなる」⇒「ID がないと Update, Delete ができない」・・・と言ってます?
退会済みユーザー

退会済みユーザー

2017/06/27 12:45

はい、そのとおりです。わかり辛くてすみません
退会済みユーザー

退会済みユーザー

2017/06/27 13:02

そもそも今回アップされたコードでは ID を表示しても Update, Delete はできないのでは? そこもあわせて全面的に見直したいということ?
退会済みユーザー

退会済みユーザー

2017/06/27 13:08

別のページに遷移してその遷移先でUPdateするようにしようとしています
退会済みユーザー

退会済みユーザー

2017/06/27 13:15

ますます意味不明です。それを具体的にどのように行うのか詳しく、あなたの状況は何も知らない第三者が読んで理解できるように、書いてください。あなたの質問は全くの説明不足ということを認識してください。
退会済みユーザー

退会済みユーザー

2017/06/27 13:24

すみません、今回は質問を取り下げ考えがまとまってからまた質問しようと思います。
退会済みユーザー

退会済みユーザー

2017/06/27 13:34

ここまで回答者・閲覧者に考えさせておいて質問を取り下げようというのですか? 回答者・閲覧者があなたの質問を考えるのに費やした労力をどう思っているのですか?
退会済みユーザー

退会済みユーザー

2017/06/27 21:52

本当に、申し訳ございません
guest

回答2

0

ベストアンサー

上の私とのやり取りから今回質問者さんがやりたいことをまとめると、

(1) SQL Server のテーブルで ID は int 型 IDENTITY の主キー。
(2) ID は GridView に表示したくない。
(3) ID がないと Update, Delete ができないという懸念がある。
(4) DB の編集・更新を別画面に遷移して行いたい。

・・・ということでいいのですよね。

で、質問者さんが質問にアップされたコードのように、DataTable を作って GridView.DataSource に設定し GridView.DataBind() したのでは、

(a) ID が自動的に表示されてしまう。
(b) と言って、SELECT クエリから ID を削除しては (4)ができなくなってしまう。

・・・ので、それを解決するのが課題だと理解しています。

上記 (a) については、GridView の AutoGenerateColumns プロパティを "False" に設定(デフォルトで true)、DataKeyNames プロパティに "ID" を設定、DataControlFieldCollection に表示するフィールドの分のみ BoundField を設定すれば可能なはずです。

それらは自力でコードを書かなくても、データソースコントロール(SqlDataSource, ObjectDataSource など)と組み合わせて Visual Studio のウィザードを使えばすべて自動生成されます。

以下の例は、Microsoft のサンプルデータベース Northwind の Products テーブルをベースに作った GridView のソースで、100% 完全なものをウィザードが自動生成してくれます。コードは自分では一行も書いてません。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="SqlDataSource1"> <Columns> <asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False" ReadOnly="True" SortExpression="ProductID" /> <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" /> <asp:BoundField DataField="SupplierID" HeaderText="SupplierID" SortExpression="SupplierID" /> <asp:BoundField DataField="CategoryID" HeaderText="CategoryID" SortExpression="CategoryID" /> <asp:BoundField DataField="QuantityPerUnit" HeaderText="QuantityPerUnit" SortExpression="QuantityPerUnit" /> <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" /> <asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" SortExpression="UnitsInStock" /> <asp:BoundField DataField="UnitsOnOrder" HeaderText="UnitsOnOrder" SortExpression="UnitsOnOrder" /> <asp:BoundField DataField="ReorderLevel" HeaderText="ReorderLevel" SortExpression="ReorderLevel" /> <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued" SortExpression="Discontinued" /> </Columns> </asp:GridView>

上記コードで、質問者さんのケースで ID に相当するのは ProductID ですが、それを表示しないようにするには当該 BoundField を削除します。それで課題 (a) は解決です。

(だから、質問者さんの先のスレッドでデータソースコントロールを使うようアドバイスしたのですが・・・無視されたようで残念)

さらに「(4) 編集・更新は別画面に遷移して行いたい」を行うための追加が必要ですが、具体的にどうしたいのか聞いても返事がないので、GridView 上で編集する行を選択し、そのイベントで別画面にリダイレクトすると勝手に想像して・・・

まず、GridView の Columns に以下のような CommandField を追加します。(これもウィザードでできます)

<asp:CommandField ShowSelectButton="True" />

さらに、GridView.SelectedIndexChanged イベントのハンドラを追加して(これもウィザードでできます)、その中に Response.Redirect メソッドを記述して(これのみ自力でコードを書く必要があります)編集・更新用の別画面に遷移すればいいです。

その際、編集するレコードの ID を別画面に渡してやらないと何ともなりませんが、ID は SelectedValue プロパティから取得できるので(DataKeyNames="ID" と設定してあれば取得できるはず)、クエリ文字列などを利用して渡してやればいいです。

投稿2017/06/28 03:04

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/28 10:05

この度は不快な思いをさせてしまいすみませんでした。
退会済みユーザー

退会済みユーザー

2017/06/28 10:30

謝っていただく必要はありません。それより、この回答に対する質問(もしあれば)、質問者さんの課題が解決できたかどうか、解決できてない場合は何が問題かを書いてください。
退会済みユーザー

退会済みユーザー

2017/06/30 21:57

無事に解決することが出来ました!ありがとうございます。
guest

0

もちっと今なにをやっているか、やろうとしているかを理解しながらコードを書くようにした方がいいですね
人間にうまく説明できないことをコンピュータにうまくやらせるとか、DeepLearningやってんじゃないんですから..

GridViewに

  • SelectedIndex
  • SelectedDataKey
  • SelectedRow
  • SelectedValue

がどうしてあるのか考えたことあります?

投稿2017/06/27 16:41

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/28 01:32

その前に ID 云々の話があるわけですから、まず AutoGenerateColumns, DataKeyNames プロパティを考える方が先になるはずです。質問者さんはもう出てこられないようなので何ですが、詳しくは回答欄に書いておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問