Page: 1/2   >>
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | | - | - | pookmark |
GridViewのセル結合
VS2005,ASP.NET2.0における、GridViewのセル結合

---

Sub JoinCells(ByVal gv As GridView,ByVal icol As Integer)
Dim numRow As Integer = gv.Rows.Count
Dim baseIndex As Integer = 0

Do While (baseIndex < numRow)
Dim nextIndex As Integer = baseIndex + 1
Dim baseCell As TableCell = gv.Rows(baseIndex).Cells(icol)

Do While (nextIndex < numRow)

Dim nextCell As TableCell = gv.Rows(nextIndex).Cells(icol)
If baseCell.Text = nextCell.Text Then
If baseCell.RowSpan = 0 Then
baseCell.RowSpan = 2
Else
baseCell.RowSpan = baseCell.RowSpan + 1
End If
nextCell.Visible = False
nextIndex = nextIndex + 1
Else
Exit Do
End If
Loop
baseIndex = nextIndex
Loop
End Sub
| いさな | 14:39 | - | - | pookmark |
Excelファイルを読み込む
ASP2.0 Excelファイルの読込み
-----
Private Function ReadXls(ByVal xlsfile As String) As DataSet
Try
Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & xlsfile _
& ";" & "Extended Properties='Excel 8.0;HDR=NO'"

Dim ExcelConnection As New OleDbConnection(sConnectionString)
Dim ExcelCommand As New OleDbCommand()
ExcelCommand.Connection = ExcelConnection
Dim ExcelAdapter As OleDbDataAdapter = New OleDbDataAdapter(ExcelCommand)
ExcelConnection.Open()

Dim ExcelSheets As DataTable = ExcelConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, _
New Object() {Nothing, Nothing, Nothing, "TABLE"})
Dim SpreadSheetName As String = "[" + ExcelSheets.Rows(0)("TABLE_NAME").ToString() + "]"

Dim ExcelDataSet As DataSet = New DataSet()
ExcelCommand.CommandText = "SELECT * FROM " + SpreadSheetName
ExcelAdapter.Fill(ExcelDataSet)

ExcelConnection.Close()
Return ExcelDataSet

Catch ex As Exception
Throw
End Try

End Function
| いさな | 11:29 | - | - | pookmark |
サブミットボタンのダブルクリック防止。
処理中にサブミットボタンを何度も押さたくないとき。

Page_Loadに以下を書きます。
string scriptstring = "";
scriptstring = @"function CheckBrauzerReadyState() { ¥n
if(window.document.readyState != null && window.document.readyState != 'complete')¥n
{¥n
return false; //処理続行NG¥n
}¥n
else{¥n
return true; //処理続行OK¥n
}¥n
}¥n";

this.RegisterClientScriptBlock("NoDoublePressKey","");

aspxファイルの
タグに
<form id="Form1" method="post" runat="server" onsubmit="return CheckBrauzerReadyState();">
みたいな感じで書いとけば動くみたいです。
| いさな | 16:21 | - | - | pookmark |
DataGridのヘッダ固定でスクロール
ネット上で検索かければ未だにいろんな人が頭を悩ませてる様子・・・。
CSSを使う、とかいろいろあるみたいだけど、ブラウザ依存チェックとかメンドウなので、ヘッダだけ別テーブル書いちゃいます。2段ヘッダとかの要件も多いので。
で、DataGridを入れるDIVと全体を入れるDIVの二つで縦横スクロールさせてます。

DataGridが伸び縮みしてヘッダとずれちゃう状態を防ぐには、ヘッダ部分のテーブル
とDataGrid部両方にstyle="TABLE-LAYOUT: fixed" を指定すればOKです。

VS2005のDataGridViewだとこんなことに悩まなくて済むんでしょうね〜(使ったこと無し)
| いさな | 13:25 | - | - | pookmark |
テキストボックスのIMEモード設定
IMEをOFFにしたいときは
<asp:TextBox>にstyle="IME-MODE: disabled;"と書けばOKです。
| いさな | 13:06 | - | - | pookmark |
OleDb接続で、パラメータクエリ
SQLインジェクションを防ぐためにもパラメータクエリは有効です。
OleDb接続でのパラメータは?になります。設定した順に値が入るので、順番を間違わないようValueをセットしましょう。

DataSetに取得してDataGridに表示するまでの流れ。
(OleDbでって人どれくらいいるのかなぁ・・・。)

System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection("Provider=hoge;Password=XXX;User ID=honya;Data Source=mogo");
System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter();

try
{
  string strSql = "SELECT * FROM TABLE WHERE ID=? AND COMPANY=?";

  OleDbCommand cmd = new OleDbCommand(strSql,cn);
  OleDbParameter P1 = new OleDbParameter("@ID",   System.Data.OleDb.OleDbType.Char);
  OleDbParameter P2 = new OleDbParameter("@COMPANY", System.Data.OleDb.OleDbType.Char);

  P1.Value = "001";
  P2.Value = "企業1";

  cmd.Parameters.Add(P1);
  cmd.Parameters.Add(P2);
  System.Data.DataSet ds = new System.Data.DataSet();

  da.SelectCommand = cmd;
  da.Fill(ds);
  DataGrid.CurrentPageIndex = 0;
  DataGrid.DataSource = ds;
  DataGrid.DataBind();
}
catch(Exception ex)
{
  throw ex;
}
finally
{
  da.Dispose();
  cn.Close();
  cn.Dispose();
}
| いさな | 11:32 | - | - | pookmark |
DataGrid上に配置したボタンのイベント
public void dgTest_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
 switch(e.CommandName)
 {
  case "CommandName1":
  //メッソドを記載
  break;

  case "CommandName2":
  //メッソドを記載
  break;
 }
}

.aspxの中の
<asp:datagrid>にOnItemCommand="dgTest_ItemCommand"
<asp:Button>にCommandName="CommandName1"等。
と書くのも忘れずに。
| いさな | 11:17 | - | - | pookmark |
DataGrid上DropDownList動的読み込み
動的にDataGrid列上に配置した、DropDownListのデータを読み込みたいとき・・・。

public void dgTest_ItemBound(object sender, DataGridItemEventArgs e)
{
//グリッド内ドロップダウンリストを読み込む
object DdlTest = e.Item.FindControl("DdlTestName");
if (DdlTest != null)
{
//ここにDropDownListのデータ読み込みメソッドをかく。
}
}

.aspxの中の<asp:datagrid>にOnItemDataBound="dgTest_ItemBound"と書くのも忘れずに。
| いさな | 11:03 | - | - | pookmark |
DataGridのカラム内にHiddenで値をもっておく。
VS2003(C#)
DataGrid内にinput type = "hidden"で値を持っておきたいときなど、取り出すときの関数。

string getHdnText(int row,int col ,int ctlno, DataGrid dg)
{
  DataBoundLiteralControl TC = (DataBoundLiteralControl)dg.Items[row].Cells[col].Controls[ctlno];
  string HiddenTxt = TC.Text;
  string split = "'";
  char [] delistr = split.ToCharArray();
  string [] splitTxt = null;
  splitTxt = HiddenTxt.Split(delistr,3);
  return splitTxt[1];
}
ctlnoはコントロール配置が何番目かを入れます。
#input type = "hidden"でセキュリティ上重要な値は持たないようにしましょう。
| いさな | 10:54 | - | - | pookmark |
DataGridのセル結合
VS2003(C#)
@ITに同様の記事がありますが、セルをRemoveしているため、セル個々のプロパティ設定がずれて表示されたりします。
セルの削除ではなくVisible = falseにすれば解決。

void joinCells(DataGrid dg, int column) {
int numRow = dg.Items.Count;
int baseIndex = 0;

while (baseIndex < numRow) {
int nextIndex = baseIndex + 1;
TableCell baseCell = dg.Items[baseIndex].Cells[column];

while (nextIndex < numRow) {

TableCell nextCell = dg.Items[nextIndex].Cells[column];

if (getText(baseCell) == getText(nextCell)) {
if (baseCell.RowSpan == 0)
{
baseCell.RowSpan = 2;
}
else
{
baseCell.RowSpan++;
}
nextCell.Visible = false;
nextIndex++;
}
else {
break;
}
}
baseIndex = nextIndex;
}
}
| いさな | 10:36 | - | - | pookmark |

Calendar

     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< December 2017 >>

Sponsored Links

Profile

Recommend

Search

Entry

Archives

Category

Feed

Others

無料ブログ作成サービス JUGEM

Mobile

qrcode