You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

338 lines
12 KiB
C#

using Newtonsoft.Json;
using System;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Windows.Forms;
namespace GeoSigma.UCDraw.WellAndSection
{
public partial class FrmRockSampleDataEdit : Form
{
class CRockSample
{
public string name { get; set; }
public string top { get; set; }
public string bottom { get; set; }
public BindingList<CSampleData> samples;
}
class CSampleData
{
public string position { get; set; }
public string sampleNo { get; set; }
public string porosity { get; set; }
public string permeability { get; set; }
public string saturation { get; set; }
public string caco3 { get; set; }
}
DataGridView mSelectdDataGrid = null;
BindingList<CRockSample> mRockSampes = new BindingList<CRockSample>();
public string mStrDataJson = "";
void RefreshSamplesGrid()
{
if (this.dataGridRockSample.CurrentRow == null)
{
this.dataGridSamples.DataSource = null;
return;
}
if (this.dataGridRockSample.CurrentRow.IsNewRow || this.dataGridRockSample.CurrentRow.DataBoundItem == null)
{
this.dataGridSamples.DataSource = null;
return;
}
CRockSample selectRock = (CRockSample)this.dataGridRockSample.CurrentRow.DataBoundItem;
this.dataGridSamples.DataSource = selectRock.samples;
dataGridSamples.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
}
public FrmRockSampleDataEdit()
{
InitializeComponent();
this.dataGridRockSample.AutoGenerateColumns = false;
this.dataGridRockSample.Columns.AddRange(
new DataGridViewTextBoxColumn { DataPropertyName = "name", HeaderText = "名称" },
new DataGridViewTextBoxColumn { DataPropertyName = "top", HeaderText = "顶深" },
new DataGridViewTextBoxColumn { DataPropertyName = "bottom", HeaderText = "底深" }
);
this.dataGridSamples.AutoGenerateColumns = false;
this.dataGridSamples.Columns.AddRange(
new DataGridViewTextBoxColumn { DataPropertyName = "position", HeaderText = "位置" },
new DataGridViewTextBoxColumn { DataPropertyName = "sampleNo", HeaderText = "样品号" },
new DataGridViewTextBoxColumn { DataPropertyName = "porosity", HeaderText = "孔隙度" },
new DataGridViewTextBoxColumn { DataPropertyName = "permeability", HeaderText = "渗透率" },
new DataGridViewTextBoxColumn { DataPropertyName = "saturation", HeaderText = "饱和度" },
new DataGridViewTextBoxColumn { DataPropertyName = "caco3", HeaderText = "碳酸钙" }
);
this.dataGridRockSample.SelectionChanged += (s, e) => RefreshSamplesGrid(); //选择主表后刷新从表
}
private void btnOK_Click(object sender, EventArgs e)
{
this.dataGridRockSample.EndEdit();
this.dataGridSamples.EndEdit();
mStrDataJson = JsonConvert.SerializeObject(mRockSampes, Formatting.None);
}
private void FrmRockSampleDataEdit_Shown(object sender, EventArgs e)
{
}
public void SetRockSampleData(string strJsonData)
{
mRockSampes = JsonConvert.DeserializeObject<BindingList<CRockSample>>(strJsonData);
dataGridRockSample.DataSource = mRockSampes;
if (mRockSampes.Count > 0)
{
dataGridRockSample.Rows[0].Selected = true;
}
}
private void btnAddRockSample_Click(object sender, EventArgs e)
{
CRockSample newRockSample = new CRockSample();
newRockSample.samples = new BindingList<CSampleData>();
mRockSampes.Add(newRockSample);
//dataGridSamples.DataSource = newRockSample.samples;
}
private void btnDelRockSample_Click(object sender, EventArgs e)
{
if (this.dataGridRockSample.CurrentRow == null || this.dataGridRockSample.CurrentRow.IsNewRow)
{
return;
}
this.dataGridRockSample.Rows.Remove(this.dataGridRockSample.CurrentRow);
}
private void btnAddSample_Click(object sender, EventArgs e)
{
try
{
if (dataGridRockSample.CurrentRow == null || dataGridRockSample.CurrentRow.IsNewRow)
{
return;
}
var rockSample = dataGridRockSample.CurrentRow.DataBoundItem as CRockSample;
if (rockSample != null)
{
CSampleData tsample = new CSampleData();
rockSample.samples.Add(tsample);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void btnDelSample_Click(object sender, EventArgs e)
{
if (this.dataGridSamples.CurrentRow == null || this.dataGridSamples.CurrentRow.IsNewRow)
{
return;
}
this.dataGridSamples.Rows.Remove(this.dataGridSamples.CurrentRow);
}
private void btnCancel_Click(object sender, EventArgs e)
{
}
private void dataGridRockSample_SelectionChanged(object sender, EventArgs e)
{
if (dataGridRockSample.SelectedRows.Count > 0 && dataGridRockSample.SelectedRows[0].DataBoundItem != null)
{
var rockSample = dataGridRockSample.SelectedRows[0].DataBoundItem as CRockSample;
if (rockSample != null)
{
dataGridSamples.DataSource = rockSample.samples;
}
}
}
private void CopyMenuItem_Click(object sender, EventArgs e)
{
if (this.mSelectdDataGrid.SelectedRows == null || mSelectdDataGrid.SelectedRows.Count == 0)
{
MessageBox.Show("请先选择数据行");
return;
}
try
{
Clipboard.SetDataObject(mSelectdDataGrid.GetClipboardContent());
}
catch (Exception ex)
{
}
}
public int GetMaxSelectedRowIndex(DataGridView dgv)
{
// 如果没有选中任何行或单元格
if (dgv.SelectedRows.Count == 0 && dgv.SelectedCells.Count == 0)
{
return -1; // 返回-1表示未选中
}
// 获取选中行和选中单元格中的最大行号
int maxFromRows = dgv.SelectedRows.Count > 0 ?
dgv.SelectedRows.Cast<DataGridViewRow>().Max(r => r.Index) : -1;
int maxFromCells = dgv.SelectedCells.Count > 0 ?
dgv.SelectedCells.Cast<DataGridViewCell>().Max(c => c.RowIndex) : -1;
// 返回两者中的较大值
return Math.Max(maxFromRows, maxFromCells);
}
private void PasteMenuItem_Click(object sender, EventArgs e)
{
try
{
string clipText = Clipboard.GetText();
if (string.IsNullOrEmpty(clipText))
return;
string[] rows = clipText.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
if (mSelectdDataGrid == this.dataGridRockSample)
{
int maxselId = GetMaxSelectedRowIndex(this.dataGridRockSample);
for (int i = 0; i < rows.Length; i++)
{
string tstr = rows[i];
tstr = tstr.TrimStart();
string[] values = tstr.Split(new[] { "\t", " ", ",", ";" }, StringSplitOptions.None);
int rcol = 3;
if (rcol > values.Length)
rcol = values.Length;
CRockSample newRockSample = new CRockSample();
newRockSample.samples = new BindingList<CSampleData>();
if (rcol > 0)
newRockSample.name = values[0];
if (rcol > 1)
newRockSample.top = values[1];
if (rcol > 2)
newRockSample.bottom = values[2];
//mRockSampes.Add(newRockSample);
mRockSampes.Insert(maxselId, newRockSample);
}
}
else
{
int maxselId = GetMaxSelectedRowIndex(this.dataGridSamples);
if (dataGridRockSample.CurrentRow == null || dataGridRockSample.CurrentRow.IsNewRow)
{
return;
}
if (maxselId < 0)
{
MessageBox.Show("选择样品表中插入位置");
return;
}
var rockSample = dataGridRockSample.CurrentRow.DataBoundItem as CRockSample;
if (rockSample == null)
return;
for (int i = 0; i < rows.Length; i++)
{
string tstr = rows[i];
tstr = tstr.TrimStart();
string[] values = tstr.Split(new[] { "\t", " ", ",", ";" }, StringSplitOptions.None);
int rcol = 6;
if (rcol > values.Length)
rcol = values.Length;
CSampleData tsample = new CSampleData();
if (rcol > 0)
tsample.position = values[0];
if (rcol > 1)
tsample.sampleNo = values[1];
if (rcol > 2)
tsample.permeability = values[2];
if (rcol > 3)
tsample.saturation = values[3];
if (rcol > 4)
tsample.porosity = values[4];
if (rcol > 5)
tsample.caco3 = values[5];
rockSample.samples.Insert(maxselId, tsample);
}
dataGridSamples.DataSource = rockSample.samples;
}
}
catch (Exception ex)
{
}
}
private void DelMenuItem_Click(object sender, EventArgs e)
{
if (mSelectdDataGrid == this.dataGridRockSample)
{
btnDelRockSample_Click(sender, e);
}
else
{
btnDelSample_Click(sender, e);
}
}
private void ClearMenuItem_Click(object sender, EventArgs e)
{
if (mSelectdDataGrid == this.dataGridRockSample)
{
this.mRockSampes.Clear();
this.dataGridSamples.DataSource = null;
}
else
{
this.dataGridSamples.Rows.Clear();
}
}
private void dataGridRockSample_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
this.mSelectdDataGrid = this.dataGridRockSample;
this.dataGridRockSample.ContextMenuStrip = this.ctmRockSampleDlg;
}
}
private void dataGridSamples_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
this.mSelectdDataGrid = this.dataGridSamples;
this.dataGridSamples.ContextMenuStrip = this.ctmRockSampleDlg;
}
}
}
}