0

Crystal Report でレポートを作成しました。このコードは問題なく動作しますが、1 つの問題があります。たとえば、備考欄が「A」の場合、備考の色を「赤」にし、結果が「B」の場合、備考の色を「青」にする必要があります。助けてください。これが私のコードです。

SqlConnection cnn;
string connectionString = null;
string sql = null;
connectionString = "data source=Server; initial catalog=Database1;user id=sa; password= passw0rd";
cnn = new SqlConnection(connectionString);
cnn.Open();
sql = "select Date as DataColumn1, Name as DataColumn2, Year as DataColumn3 Remarks as DataColumn4 from TableStudents";
SqlDataAdapter dscmd = new SqlDataAdapter(sql, cnn);
cnn.Close();

DataSet1 ds = new DataSet1();
dscmd.Fill(ds, "DataTable1");

CrystalReport1 objRpt = new CrystalReport1();
objRpt.SetDataSource(ds.Tables[0]);

objRpt.ExportToDisk(ExportFormatType.PortableDocFormat, Server.MapPath("Reports.pdf"));
ScriptManager.RegisterStartupScript(base.Page, base.Page.GetType(), "check0", "window.open('" + "Reports.pdf" + "','win2','status=no,toolbar=no,scrollbars=no,titlebar=no,menubar=no,resizable=yes,directories=no,location=no');", true);

このコードは、新しいウィンドウでレポートを完全に開きます。色を変えるだけの問題。わかりません。何をすべきか教えてください。これは単純な概念ですが、次に何をすべきかわかりません。ありがとう。

if(result=="A")
{
result.color = "red";
}
else
{
result.color = "blue";
}
4

2 に答える 2

1

私は結果についてあなたの考えを得ることができませんが、私はあなたがフィールドオブジェクトを持っていて、コードのためにそのフィールドオブジェクトを変更することに基づいて色を変更したいと考えています:

            foreach (Section sec in report1.Sections)
            {
                for (int i = 1; i < sec.ReportObjects.Count + 1; i++)
                {
                    objMain = report1.Sections[sec.Name].ReportObjects[i];
                    try
                        {
                            FieldObject to1 = (FieldObject)objMain;
                            if(to1.Value == "A")
                            {                                
                                to1.TextColor = ColorToUInt(Color.Red);
                            }
                            else
                            {
                                to1.TextColor = ColorToUInt(Color.Blue);
                            }
                        }
                        catch (Exception){}
                }                
            }

最後に、このメソッドも追加する必要があります。

    public uint ColorToUInt(Color color)
    {
        return (uint)((color.A << 24) | (color.R << 16) |
        (color.G << 8) | (color.B << 0));
    }
于 2013-10-06T13:57:13.677 に答える