3

そのため、値に基づいてテキストの色を変更することになっている C# 関数を実行しています。リストビューから関数を削除すると、値が出力されますが、それを含めると、何も出力されませんでした。最終的に、関数には何も問題がないことがわかりましたが、データをリストビューにバインドする方法に問題はありません、だから私は何が間違っているのだろうと思っています。

これが私のコードです:

 <asp:SqlDataSource id="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:2007  SoundAssist VER 1.0.5  05-12-2011 (2013-06-24)ConnectionString %>" ProviderName="<%$ ConnectionStrings:2007 SoundAssist VER 1.0.5  05-12-2011  2013-06-24)ConnectionString.ProviderName %>" SelectCommand="SELECT [Plant], [Group No#] AS column1, [Group], [Job Code] AS Job_Code, [TWA], [Job Classification] AS Job_Classification, [Job Function] AS Job_Function, [Job Description] AS Job_Description FROM [Temp Table that contains TWA values] WHERE (([Job Description] = ?) AND ([Group] = ?) AND ([Job Classification] = ?))">
                                                    <SelectParameters>
                                                        <asp:ControlParameter ControlID="DropDownList6" Name="Job_Description" PropertyName="SelectedValue" Type="String" />
                                                        <asp:ControlParameter ControlID="DropDownList4" Name="Group" PropertyName="SelectedValue" Type="String" />
                                                        <asp:ControlParameter ControlID="DropDownList5" Name="Job_Classification" PropertyName="SelectedValue" Type="String" />
                                                    </SelectParameters>

そして私のリストビュー行:

<asp:ListView id="YourListView"  runat="server" DataSourceID="SqlDataSource3" OnItemDataBound="YourListView_ItemDataBound" >

そして私の色関数:

protected void YourListView_ItemDataBound(object sender, ListViewItemEventArgs e)
  {
if (e.Item.ItemType == ListViewItemType.DataItem)
{
    Label theTWALabel = (Label)e.Item.FindControl("TWALabel");
    int theTWAValue = Convert.ToInt32(theTWALabel.Text);
    if (theTWAValue >= 85)
    {
        if (theTWAValue < 90)
        {
            theTWALabel.CssClass = "YellowThis";
        }
        else
        {
            theTWALabel.CssClass = "RedThis";
        }
    }
}
}

リストビューは次のとおりです。

<ItemTemplate>
    <span style="background-color: white;color: #333333; border: 2em; border-width:1em; border-color:black;"> 
        Plant Name: 
        <asp:Label id="PlantLabel" runat="server" Text='<%# Eval("Plant") %>' />
        <br />
        Department #:
        <asp:Label id="column1Label" runat="server" Text='<%# Eval("column1") %>' />
        <br />
        Department Name:
        <asp:Label id="GroupLabel" runat="server" Text='<%# Eval("Group") %>' />
        <br />
        Job Code:
        <asp:Label id="Job_CodeLabel" runat="server" Text='<%# Eval("Job_Code") %>' />
        <br /> 
        TWA
        <asp:Label id="TWALabel" runat="server" Text='<%# Eval("TWA") %>' />
        <br />
    </span>
</ItemTemplate> 

また、これらを入力しませんでした(つまり、Sqlステートメント)。組み込みのasp.net接続ウィザードを使用してこれを行い、すべて作成しました。

編集:この質問に答えるために必要な情報が他にある場合は、コメントしてください

Edit2: if ポストバック機能が必要になる可能性はありますか?

4

3 に答える 3

1

問題は、イベント ハンドラー内のコントロールにアクセスしようとしていYourListView_ItemDataBoundて、その時点でListViewはまだロードされていないことです。

ListViewイベントハンドラーに追加して、onLoadそのメソッド内で次のようにアイテムを操作してみてください。

protected void YourListView_Load(object sender, EventArgs e)
{
    Label theTWALabel;
    int theTWAValue;
    foreach (ListViewItem item in YourListView.Items)
    {
        theTWALabel = (Label)item.FindControl("TWALabel");
        theTWAValue = Convert.ToInt32(theTWALabel.Text);
        if (theTWAValue >= 85)
        {
            if (theTWAValue < 90)
                theTWALabel.ForeColor = System.Drawing.Color.Yellow;
            else
                theTWALabel.ForeColor = System.Drawing.Color.Red;
        }
    }
}
于 2013-07-16T13:16:10.427 に答える
1

FindControl を使用するのではなく、コントロールをループしてみることができます。

if (e.Item.ItemType == ListViewItemType.DataItem)
{
    foreach (Control c in e.Item.Controls) 
    {
        if (c is Label && c.ID.Contains("TWALabel"))
        {
            Label theTWALabel = (Label)c
            int theTWAValue = Convert.ToInt32(theTWALabel.Text);
            if (theTWAValue >= 85)
            {
                if (theTWAValue < 90)
                {
                    theTWALabel.CssClass = "YellowThis";
                }
                else
                {
                    theTWALabel.CssClass = "RedThis";
                }
            }            
        }
    }
}

.Net が ID 名を変更した場合でも、ID に部分文字列 TWALabel があるかどうかを確認し、そのコントロールを見つけることができます。

おそらくもっと良い方法がありますが、うまくいくとわかっている別の方法は思いつきません。

于 2013-07-16T13:47:27.470 に答える