⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 superdatagrid.cs

📁 asp.net技术内幕的书配源码
💻 CS
📖 第 1 页 / 共 3 页
字号:

        //*********************************************************************
        //
        // 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( "&nbsp;|&nbsp;");
                        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( "&nbsp;|&nbsp;");

                // 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 + -