В моем приложении Winform с неизвестным количеством утверждающих 1-5. Я хочу распечатать форму и динамически добавлять подпись утверждающего лица в эти поля с изображениями. Код кнопки «Печать»:
Код: Выделить всё
private void btnPrint_Click(object sender, EventArgs e)
{
if (dgvList.CurrentRow == null)
{
MessageBox.Show("لطفاً یک درخواست انتخاب کنید.");
return;
}
int requestId = Convert.ToInt32(dgvList.CurrentRow.Cells["RequestID"].Value);
DataTable dtProducts = new DataTable();
DataTable dtRequest = new DataTable();
DataTable dtSignatures = new DataTable();
using (SqlConnection conn = new SqlConnection(ConnectionDB))
{
conn.Open();
using (SqlDataAdapter daProducts = new SqlDataAdapter(
"SELECT * FROM RequestProducts WHERE RequestID = @RequestID", conn))
{
daProducts.SelectCommand.Parameters.AddWithValue("@RequestID", requestId);
daProducts.Fill(dtProducts);
}
using (SqlDataAdapter daRequest = new SqlDataAdapter(
"SELECT * FROM Requests WHERE RequestID = @RequestID", conn))
{
daRequest.SelectCommand.Parameters.AddWithValue("@RequestID", requestId);
daRequest.Fill(dtRequest);
}
using (SqlDataAdapter daSignatures = new SqlDataAdapter(@"
SELECT u.FullName, u.SignatureImage
FROM Approvals a
INNER JOIN Users u ON a.ApproverID = u.UserId
WHERE a.RequestID = @RequestID
ORDER BY a.Level", conn))
{
daSignatures.SelectCommand.Parameters.AddWithValue("@RequestID", requestId);
daSignatures.Fill(dtSignatures);
}
StiReport report = new StiReport();
string reportPath = Path.Combine(Application.StartupPath, "Reports", "Report.mrt");
report.Load(reportPath);
// ثبت دیتاسورسها
report.RegData("Products", dtProducts);
report.RegData("Request", dtRequest);
report.Dictionary.Synchronize();
for (int i = 0; i < 5; i++)
{
string nameVar = $"Name{i + 1}";
string sigVar = $"Signature{i + 1}";
if (i < dtSignatures.Rows.Count)
{
report[nameVar] = dtSignatures.Rows[i]["FullName"].ToString();
var bytes = dtSignatures.Rows[i]["SignatureImage"] as byte[];
if (bytes != null && bytes.Length > 0)
{
using (MemoryStream ms = new MemoryStream(bytes))
report[sigVar] = Image.FromStream(ms);
}
else
{
report[sigVar] = null;
}
}
else
{
report[nameVar] = "";
report[sigVar] = null;
}
}
report.Show();
}
}
На изображении показано свойство, которое я установил для полей изображений.

Подробнее здесь: https://stackoverflow.com/questions/798 ... oft-report
Мобильная версия