📄 superdatagrid.cs
字号:
//*********************************************************************
//
// RaisePostBackEvent Method
//
// When a link is clicked (for sorting, paging, editing), this
// method launches off the right action.
//
//*********************************************************************
public void RaisePostBackEvent(String eventArgument) {
string[] parts = eventArgument.Split(new Char[] {'_'}, 2);
switch (parts[0]) {
case "edit" :
_editClicked = true;
EditItemIndex = Int32.Parse(parts[1]);
break;
case "cancel" :
EditItemIndex = -1;
break;
case "update" :
_updateClicked = true;;
break;
case "sort" :
UpdateSort( parts[1] );
break;
case "page" :
UpdatePage( Int32.Parse(parts[1]) );
break;
case "delete" :
_deleteClicked = true;
_deleteItemIndex = Int32.Parse(parts[1]);
break;
}
}
//*********************************************************************
//
// UpdatePage Method
//
// Change the current page when paging is enabled.
//
//*********************************************************************
private void UpdatePage(int newPageIndex) {
CurrentPageIndex = newPageIndex;
}
//*********************************************************************
//
// UpdateDatabase Method
//
// Perform the update to the database table.
//
//*********************************************************************
private void UpdateDatabase() {
// Start by updating the data table
DataRow row = _dataGridView[EditItemIndex].Row;
foreach (DataColumn col in _dataGridData.Columns)
if (colEditValues.Contains( "txt" + col.ColumnName)) {
try {
row[col.ColumnName] = colEditValues["txt" + col.ColumnName];
} catch {
_errorMessage = "Could not update column " + col.ColumnName;
return;
}
}
// Create a command builder
SqlDataAdapter dad = new SqlDataAdapter(_commandText, ConnectionString);
SqlCommandBuilder builder = new SqlCommandBuilder(dad);
try {
dad.Update( _dataGridData);
} catch (Exception ex){
_errorMessage = ex.Message;
return;
}
// Deselect any row for editing
EditItemIndex = -1;
}
private void DeleteRow(int rowIndex) {
// Delete row from datatable
DataRow row = _dataGridView[rowIndex].Row;
row.Delete();
// Create a command builder
SqlDataAdapter dad = new SqlDataAdapter(_commandText, ConnectionString);
SqlCommandBuilder builder = new SqlCommandBuilder(dad);
try {
dad.Update( _dataGridData);
} catch (Exception ex){
_errorMessage = ex.Message;
}
}
//*********************************************************************
//
// UpdateSort Method
//
// When a new column is clicked for sorting, update the SortColumn
// and SortOrder.
//
//*********************************************************************
private void UpdateSort(string sortExpression) {
EditItemIndex = -1;
CurrentPageIndex = 1;
if (sortExpression == SortColumn) {
if (SortOrder == "DESC")
SortOrder = "ASC";
else
SortOrder = "DESC";
} else
SortOrder = "ASC";
SortColumn = sortExpression;
}
//*********************************************************************
//
// InitDatabaseObjects Method
//
// Initialize the connection string and the command text.
//
//*********************************************************************
private void InitDatabaseObjects() {
// Check connection string
if (ConnectionString == String.Empty)
throw new ArgumentException( "You must set the ConnectionString property!");
// Check table name
if (TableName == String.Empty && CommandText == String.Empty)
throw new ArgumentException( "You must set the TableName or CommandText property!");
// Calculate SELECT statement
if (CommandText == String.Empty)
_commandText = String.Format( "SELECT * FROM {0}", TableName );
else
_commandText = CommandText;
}
//*********************************************************************
//
// LoadDatabaseData Method
//
// Load the database data and schema.
//
//*********************************************************************
private void LoadDatabaseData() {
InitDatabaseObjects();
// Get datagrid table
SqlConnection con = new SqlConnection( ConnectionString );
con.Open();
SqlDataAdapter dad = new SqlDataAdapter( _commandText, con);
dad.Fill( _dataGridData );
// Get datagrid schema
SqlCommand cmd = new SqlCommand(_commandText, con);
_dataGridSchema = cmd.ExecuteReader(CommandBehavior.SchemaOnly).GetSchemaTable();
con.Close();
}
//*********************************************************************
//
// RenderTable Method
//
// Display the main HTML table to display the database data.
//
//*********************************************************************
private void RenderTable(HtmlTextWriter writer) {
// Calculate Alternating Item Style
_alternatingItemStyle.MergeWith(_itemStyle);
// Calculate Start Index
int startIndex = 0;
if (_enablePaging)
startIndex = ( (CurrentPageIndex - 1) * _pageSize);
// Calculate End Index
int endIndex = _dataGridData.Rows.Count;
if (_enablePaging) {
endIndex = startIndex + _pageSize;
if (endIndex > _dataGridData.Rows.Count)
endIndex = _dataGridData.Rows.Count;
}
// Render rows
for (int i=startIndex;i < endIndex; i++) {
if (i % 2 == 0)
_itemStyle.AddAttributesToRender(writer);
else
_alternatingItemStyle.AddAttributesToRender(writer);
if (_enableEditing && EditItemIndex == i)
RenderEditRow(writer, i);
else
RenderRow(writer, i);
}
}
//*********************************************************************
//
// RenderRow Method
//
// Display a particular row in the HTML table.
//
//*********************************************************************
private void RenderRow(HtmlTextWriter writer, int itemIndex) {
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
if (_enableEditing) {
writer.RenderBeginTag(HtmlTextWriterTag.Td);
RenderLink(writer, "Edit", "edit_" + itemIndex.ToString());
if (_enableDeleting) {
writer.Write( " | ");
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "return confirm('Are you sure you want to delete this row?')");
RenderLink(writer, "Delete", "delete_" + itemIndex.ToString());
}
writer.RenderEndTag();
}
for (int i=0;i < _dataGridData.Columns.Count; i++ ) {
writer.RenderBeginTag( HtmlTextWriterTag.Td);
RenderColumn(writer, itemIndex, i);
writer.RenderEndTag();
}
writer.RenderEndTag();
}
//*********************************************************************
//
// RenderEditRow Method
//
// Render a row for editing.
//
//*********************************************************************
private void RenderEditRow(HtmlTextWriter writer, int itemIndex) {
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
// Render update link
RenderLink(writer, "Update", "update_" + itemIndex.ToString());
writer.Write( " | ");
// Render Cancel link
RenderLink(writer, "Cancel", "cancel_" + itemIndex.ToString());
writer.RenderEndTag();
for (int i=0;i < _dataGridData.Columns.Count; i++ ) {
writer.AddAttribute(HtmlTextWriterAttribute.Valign, "top");
writer.RenderBeginTag( HtmlTextWriterTag.Td);
RenderEditColumn(writer, itemIndex, i);
writer.RenderEndTag();
}
writer.RenderEndTag();
}
//*********************************************************************
//
// RenderColumn Method
//
// Render the value of a column. For money columns, we'll apply
// some formatting.
//
//*********************************************************************
private void RenderColumn(HtmlTextWriter writer, int rowIndex, int colIndex) {
object colValue = _dataGridView[rowIndex][colIndex];
SqlDbType providerType = ((SqlDbType)_dataGridSchema.Rows[colIndex]["ProviderType"]);
switch (providerType) {
case SqlDbType.Money :
writer.Write( ((decimal)colValue).ToString("c") );
break;
case SqlDbType.Image :
writer.Write( "[Image]" );
break;
case SqlDbType.DateTime :
DateTime dtm = (DateTime)colValue;
if ( dtm.Date == dtm )
writer.Write( dtm.ToString("d"));
else
writer.Write( dtm.ToString("g"));
break;
default:
writer.Write( colValue.ToString() );
break;
}
}
//*********************************************************************
//
// RenderEditColumn Method
//
// Render a column with the right UI for editing its contents.
//
//*********************************************************************
private void RenderEditColumn(HtmlTextWriter writer, int rowIndex, int colIndex) {
string colName = _dataGridData.Columns[colIndex].ColumnName;
object colValue = _dataGridView[rowIndex][colIndex];
if (colEditValues.Contains(colName) )
colValue = colEditValues[colName];
SqlDbType providerType = ((SqlDbType)_dataGridSchema.Rows[colIndex]["ProviderType"]);
int columnSize = ((int)_dataGridSchema.Rows[colIndex]["ColumnSize"]);
bool colIsIdentity = ((bool)_dataGridSchema.Rows[colIndex]["IsIdentity"]);
if (colIsIdentity)
writer.Write( colValue.ToString() );
else
switch (providerType) {
case SqlDbType.VarChar :
case SqlDbType.NVarChar :
case SqlDbType.NText :
case SqlDbType.Text :
if (columnSize > 100 )
RenderTextBox(writer, colName, colValue, 30, 3, columnSize);
else if (columnSize > 30)
RenderTextBox(writer, colName, colValue, 30, 1, columnSize);
else
RenderTextBox(writer, colName, colValue, columnSize, 1, columnSize);
break;
case SqlDbType.Bit :
RenderSelect(writer, colName);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -