📄 fselect.cs
字号:
#endregion
#region ShowDialog
public new DialogResult ShowDialog(IWin32Window owner)
{
DialogResult dResult = DialogResult.Cancel;
try
{
GetData();
//实际数据行数
m_DataRowCount = m_DsData.RowCount;
if (m_DsData.RowCount == 0)
{
dResult = DialogResult.Cancel;
}
else if (m_DsData.RowCount == 1)
{
SelectData(1);
dResult = DialogResult.OK;
}
else
{
int padRowCount = 9 - m_DsData.RowCount % m_PageRowCount;
m_PageCount = m_DsData.RowCount / m_PageRowCount + ((m_DsData.RowCount % m_PageRowCount) > 0 ? 1 : 0);
m_CurrentPage = 1;
//补足9行
for (int i = 1; i < padRowCount + 1; i++)
{
m_DsData.InsertRow(0);
}
if (owner == null)
dResult = base.ShowDialog();
else
dResult = base.ShowDialog(owner);
}
}
finally
{
if (m_ShowColumn != null)
{
m_ShowColumn.Clear();
m_ShowColumn.Dispose();
}
if (m_ReturnCol != null)
m_ReturnCol.Clear();
if (m_DsData != null)
{
m_DsData.ShareDataOff();
m_DsData.Dispose();
}
}
return dResult;
}
public new DialogResult ShowDialog()
{
return this.ShowDialog(null);
}
#endregion
private void FSelect_Load(object sender, EventArgs e)
{
try
{
this.CreateDW();
this.SetPageLabel();
}
catch (Exception ex)
{
MessageBox.Show("创建数据窗口发生异常:" + ex.Message, MsgTitle.Error);
this.DialogResult = DialogResult.Cancel;
}
}
#region ShowPage
private void SetPageLabel()
{
if (m_PageCount < m_MaxPage)
{
label1.Text = "第" + m_CurrentPage.ToString() + "页/共" + m_PageCount.ToString()+"页";
}
else
{
label1.Text = "第" + m_CurrentPage.ToString() + "页/共" + m_PageCount.ToString() + "页 最多显示页数:" + m_MaxPage.ToString();
}
}
private enum ShowPageEnum
{
Up,
Down
}
private void ShowPage(ShowPageEnum showPageEnum)
{
if (showPageEnum == ShowPageEnum.Up)
{
if (m_CurrentPage > 1)
{
int row = (m_CurrentPage-2)*m_PageRowCount+1;
dwSelect.ScrollToRow(row);
dwSelect.SetRow(row);
m_CurrentPage--;
this.SetPageLabel();
}
}
else
{
if (m_CurrentPage <m_PageCount)
{
int row = m_CurrentPage * m_PageRowCount + 9;
dwSelect.ScrollToRow(row);
//大于实际数据行
if (row > m_DataRowCount)
row = m_DataRowCount;
dwSelect.SetRow(row);
m_CurrentPage++;
this.SetPageLabel();
}
}
}
private void ScrollToRow(int opertion)
{
//opertion == 1
//opertion == -1
int targetRow = 0;
if (opertion == 1) //向上一行
targetRow = dwSelect.CurrentRow - 1;
else //向下一行
targetRow = dwSelect.CurrentRow + 1;
if (targetRow < 1 || targetRow > m_DataRowCount)
return;
int startRow = (m_CurrentPage - 1) * m_PageRowCount + 1;
int endRow = m_CurrentPage * m_PageRowCount;
if (targetRow >= startRow && targetRow <= endRow)
{
dwSelect.SetRow(targetRow);
dwSelect.ScrollToRow(targetRow);
}
}
#endregion
#region Activated
private void FSelect_Activated(object sender, EventArgs e)
{
this.dwSelect.Focus();
}
#endregion
#region Key
private bool isKeyDownInHere = false;
private void dwSelect_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
isKeyDownInHere = true;
}
private void dwSelect_KeyUp(object sender, KeyEventArgs e)
{
if (!isKeyDownInHere)
return;
switch (e.KeyCode)
{
case Keys.PageDown:
ShowPage(ShowPageEnum.Down);
break;
case Keys.PageUp:
ShowPage(ShowPageEnum.Up);
break;
case Keys.Enter:
if (dwSelect.CurrentRow > 0)
{
this.SelectData(dwSelect.CurrentRow);
}
break;
case Keys.Escape:
this.DialogResult = DialogResult.Cancel;
this.Close();
break;
case Keys.Right:
case Keys.Down:
ScrollToRow(-1);
break;
case Keys.Left:
case Keys.Up:
ScrollToRow(1);
break;
case Keys.NumPad1:
this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 1);
break;
case Keys.NumPad2:
this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 2);
break;
case Keys.NumPad3:
this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 3);
break;
case Keys.NumPad4:
this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 4);
break;
case Keys.NumPad5:
this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 5);
break;
case Keys.NumPad6:
this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 6);
break;
case Keys.NumPad7:
this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 7);
break;
case Keys.NumPad8:
this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 8);
break;
case Keys.NumPad9:
this.SelectData((m_CurrentPage - 1) * m_PageRowCount + 9);
break;
}
}
#endregion
#region 选中数据
private void SelectData(int row)
{
if (row == 0 || row > m_DataRowCount)
return;
ArrayList retValue = new ArrayList(m_ReturnCol.Count);
for(int i=0;i<m_ReturnCol.Count;i++)
{
if (m_DsData.IsItemNull(row,m_ReturnCol[i].ToString()))
retValue.Add("");
else
retValue.Add(m_DsData.GetItemString(row, m_ReturnCol[i].ToString()));
}
m_ReturnValue = (string[])retValue.ToArray(typeof(string));
retValue.Clear();
this.DialogResult = DialogResult.OK;
}
#endregion
private void dwSelect_Click(object sender, EventArgs e)
{
if (dwSelect.ObjectUnderMouse.RowNumber > m_DataRowCount)
return;
SelectData(dwSelect.ObjectUnderMouse.RowNumber);
}
private void FSelect_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show(e.KeyValue.ToString());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -