📄 mytable.cs
字号:
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace snowy
{
public class InvalidEventArgs : EventArgs
{
public readonly int Row;
public readonly int Column;
public InvalidEventArgs(int row, int column)
{
Row = row;
Column = column;
}
}
public class MyTable : Control, INamingContainer
{
private Table _table;
public int Rows
{
get{ return (int)ViewState["_rows"]; }
set{ ViewState["_rows"] = value; }
}
public int Columns
{
get{ return (int)ViewState["_columns"]; }
set{ ViewState["_columns"] = value; }
}
public delegate void InvalidHandler(object sender, InvalidEventArgs e);
public event InvalidHandler Invalid;
public virtual void OnInvalid(InvalidEventArgs arg)
{
if(Invalid != null)
Invalid(this, arg);
}
public void OnTextChanged(object sender, EventArgs arg)
{
string ID = ((TextBox)sender).ID;
int position = ID.IndexOf('c');
int row = int.Parse( ID.Substring(1, position-1));
int column = int.Parse(ID.Substring(position+1, ID.Length-1-position));
// Calculate row sum
int sum = 0;
for(int x=1; x<=Columns; x++)
{
TextBox textbox = (TextBox)_table.Rows[row].Cells[x].Controls[0];
if(textbox.Text.Trim() != "")
{
try
{
sum += int.Parse(textbox.Text);
}
catch
{
OnInvalid(new InvalidEventArgs(row, x));
return;
}
}
}
((TextBox)_table.Rows[row].Cells[Columns+1].Controls[0]).Text = sum.ToString();
// Calculate column sum
sum = 0;
for(int x=1; x<=Rows; x++)
{
TextBox textbox = (TextBox)_table.Rows[x].Cells[column].Controls[0];
if(textbox.Text.Trim() != "")
{
try
{
sum += int.Parse(textbox.Text);
}
catch
{
OnInvalid(new InvalidEventArgs(x, column));
return;
}
}
}
((TextBox)_table.Rows[Rows+1].Cells[column].Controls[0]).Text = sum.ToString();
}
protected override void CreateChildControls()
{
_table = new Table();
_table.BorderWidth = 2;
_table.BorderStyle = BorderStyle.Solid;
_table.GridLines = GridLines.Both;
Controls.Add(_table);
TableRow row;
TableCell cell;
//Create Headline
row = new TableRow();
_table.Rows.Add(row);
for(int y=0; y<=Columns+1; y++)
{
Label label = new Label();
label.Text = "第" + y.ToString() + "列";
cell = new TableCell();
cell.Controls.Add(label);
row.Cells.Add(cell);
}
((Label)_table.Rows[0].Cells[0].Controls[0]).Text = "标题";
((Label)_table.Rows[0].Cells[Columns+1].Controls[0]).Text = "合计";
for(int x=1; x<=Rows; x++)
{
row = new TableRow();
_table.Rows.Add(row);
Label label = new Label();
label.Text = "第" + x.ToString() + "行";
cell = new TableCell();
cell.Controls.Add(label);
row.Cells.Add(cell);
for(int y=1; y<=Columns+1; y++)
{
TextBox textbox = new TextBox();
textbox.Width = 50;
textbox.AutoPostBack = true;
textbox.ID = "r" + x.ToString() + "c" + y.ToString();
textbox.TextChanged += new EventHandler(OnTextChanged);
cell = new TableCell();
cell.Controls.Add(textbox);
row.Cells.Add(cell);
}
}
row = new TableRow();
_table.Rows.Add(row);
Label label2 = new Label();
label2.Text = "小计";
cell = new TableCell();
cell.Controls.Add(label2);
row.Cells.Add(cell);
for(int y=1; y<=Columns+1; y++)
{
TextBox textbox = new TextBox();
textbox.Width = 50;
cell = new TableCell();
cell.Controls.Add(textbox);
row.Cells.Add(cell);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -