2011-07-01 35 views
2

この問題の解決策としてインターネットを精査し、これまで成功していません。私はASP.NETのGridViewの "強調表示された"行に基づいてSQLデータベースを更新しようとしています。ここでは、これまで強調してきたコードを示します。ASP.NET Gridview:マウスの行を強調表示して強調表示した行を更新します

// ASP.NET

// GridView1 Row DataBound event: adds selection functionality 
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    e.Row.Attributes.Add("onmousedown", "IsMouseDown(this)"); 
    e.Row.Attributes.Add("onmouseup", "IsMouseDown(this)"); 
    e.Row.Attributes.Add("onmouseover", "HighlightRow(this)"); 
} 

// Javascriptを

<script type="text/javascript"> 
    var mousedown = false; 

    document.onselectstart = new Function ("return false") 

    function IsMouseDown(row) { 
     if (mousedown == false) mousedown = true; 
     else mousedown = false 

     if (mousedown == true) { 
      HighlightRow(row) 
     } 
    } 

    function HighlightRow(row) { 
     if (mousedown == true) { 
      if (row.className == 'gridHighlightedRow') { 
       row.className = 'gridNormalRow'; 
      } 
      else { 
       row.className = 'gridHighlightedRow'; 
      } 
     } 
    } 
</script> 

// CSSクラス上記のコードは完璧に働いている

.gridNormalRow 
{ 
    background-color: #FFFFFF; 
} 
.gridHighlightedRow 
{ 
    background-color: #FFFFCC; 
} 

、問題は、私ができることですJavascript(私の理解に基づいている)modfties tを強調表示された行と何もしないrタグ、実際のGridViewクラスまたはBackColorではありません。私は解決のためにその場を見てきました。私がする必要があるのは、各行を更新するためにC#コードからアクセスできるいくつかの識別子を見つけることだけです。誰にでもアイデアはありますか?

クイック編集

実際に隠しフィールドのいくつかのタイプを使用するのではと思った私は、私はちょうどJavaScriptや私がRow.Attributes.Addを(行うために必要があるだろうとのことを行うにはどのようには考えています)それを隠しフィールドに保存する。

+0

JQueryを使用して送信してから、JQuery ajaxでサービスを呼び出し、それに応じてデータベースを更新することができます。 – Jethro

答えて

0

私はそれを理解しました。ちょっと面倒ですが、私が持っているものを洗練するまでは動作します。

まず私はjavascriptの

// C#

// GridView1 Row DataBound event: adds selection functionality 
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    // Excludes row header and pager rows 
    if (e.Row.RowType != DataControlRowType.Header && e.Row.RowType != DataControlRowType.Pager) 
    { 
     e.Row.Attributes.Add("onmousedown", "IsMouseDown(this," + e.Row.RowIndex + ")"); 
     e.Row.Attributes.Add("onmouseup", "IsMouseDown(this," + e.Row.RowIndex + ")"); 
     e.Row.Attributes.Add("onmouseover", "HighlightRow(this," + e.Row.RowIndex + ")"); 
    } 
} 

に行インデックスを送っは次に強調し、行ごとにマウスダウンが本当だったとき、私は、文字列を付加してマウスオーバーでした。 mouseUpイベント火災は私は

<script type="text/javascript"> 
    var mousedown = false; 
    var returnGrid = ""; 

    document.onselectstart = new Function ("return false") 

    function IsMouseDown(row, index) { 
     if (mousedown == false) mousedown = true; 
     else mousedown = false 

     if (mousedown == true) { 
      HighlightRow(row, index) 
     } 
     else 
     { 
      __doPostBack("ReturnedIndexes", returnGrid); 
     } 
    } 

    function HighlightRow(row, index) { 
     if (mousedown == true) { 
      if (row.className == 'gridHighlightedRow') { 
       row.className = 'gridNormalRow'; 
       returnGrid += (index + ","); 
      } 
      else { 
       row.className = 'gridHighlightedRow'; 
       returnGrid += (index + ","); 
      } 
     } 
    } 
</script> 

最後に、「ReturnIndexes」イベントターゲットとページのロードは、私が何行の色に基づいて行の色を設定すると、文字列のポストバック

// Javascriptを行ったとき現在はです。

// C#

// Page load event 
protected void Page_Load(object sender, EventArgs e) 
{ 
    // Avoids calling this code if the call is a postback 
    if (!IsPostBack) 
    { 
     // Some Code Here 
    } 
    else if(Request.Params.Get("__EVENTTARGET").ToString() == "ReturnedIndexes") 
    { 
     // Returns highlighted results 
     String ReturnIndexes = Request.Params.Get("__EVENTARGUMENT").ToString(); 

     txtRowIndexes.Text = ReturnIndexes; 

     int[] GridIndex = RowHighlightChanged(); 

     for (int i = 0; i < GridIndex.Length; i++) 
     { 
      if (GridView1.Rows[GridIndex[i]].CssClass == "gridHighlightedRow") 
      { 
       GridView1.Rows[GridIndex[i]].CssClass = "gridNormalRow"; 
      } 
      else GridView1.Rows[GridIndex[i]].CssClass = "gridHighlightedRow"; 
     } 
    } 
} 

最後に、私はただのCssClass "gridHighlightedRow" を探し、 "強調表示" の行を更新します。

// C#

// buttonUpdateSelected Click event: Updates all items currently selected in the grid view 
protected void buttonUpdateSelected_Click(object sender, EventArgs e) 
{ 
    foreach (GridViewRow row in GridView1.Rows) 
    { 
     if (row.CssClass == "gridHighlightedRow") 
     { 
      // Update Rows 
     } 
    } 
} 

私は思う:)かなりうまく動作します。

トーマスのおかげで、私は正しい軌道に乗り始めました!

1

強調表示された行/レコードのIDを格納するためにHiddenFieldを使用してください。 HighlightRowを呼び出すと、選択したIDをHiddenFieldに追加するだけです。ポストバック後、コードビハインドでその値を読み取ることができます。または、行に属性を使用して、選択されたものに対して単純なブール値を格納することができます。これを解決する方法はたくさんあります。

+0

私が理解しているところでは、属性を追加すると実際のASPではなくHTMLが変更されます。私はグリッドを本当にクールに見せてくれるあらゆる種類のクライアントサイドを行うことができます。ページの背後にあるコードに何かをポストさせることはできません。私が具体的に何をすることができるか、どのような例がありますか?C#のインデックスとbool値の配列をjavascriptを使って変更しますか? –

関連する問題