1

私はこれについてしばらく見回しましたが、これを理解することができません。onItemDataBound一部のクラスとスタイルを設定したいイベントのネストされたリピーターがあり<DIV>ます。

HTML: <%# DataBinder.Eval(Container.DataItem,"sServer") %> > >

コードビハインド

 protected void rpDB_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        string _sql = "";
        using(SqlConnection _conn = new SqlConnection(_sql))
        {
            _conn.Open();
            DataTable _dt = new DataTable();
            // Get repeater controls
            Repeater rpDB_item = (Repeater)(e.Item.FindControl("rpDB_item"));
            SqlCommand _cmd = new SqlCommand("", _conn);
            SqlDataAdapter _da = new SqlDataAdapter(_cmd);
            _da.Fill(_dt);
            rpDB_item.DataSource = _dt;
            rpDB_item.DataBind();
        }

    }
}

protected void rpDB_item_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {

        if (<value of dataitem("online")> == "Online")
        {
            ((HtmlGenericControl)e.Item.FindControl("label2")).Attributes.Add("class", "glyphicon glyphicon-file");
            ((HtmlGenericControl)e.Item.FindControl("label2")).Attributes.Add("style", "color: green;");
            ((HtmlGenericControl)e.Item.FindControl("label2")).Attributes.Add("title", *<value of dataitem(sFile)>*);
        }
    }
}

私が立ち往生しているのは分離コードにあります。上記の rpDB_item_ItemDataBound イベントなど、いくつかの式で dataitem の列の 1 つの値を使用したいと考えています。

いいえ:

if (e.Item.DataItem("Online") == "Online")
{
   ((HtmlGenericControl)e.Item.FindControl("label2")).Attributes.Add("title", * e.Item.DataItem("sFile").ToString()*);
} 

明らかに何かがおかしいので、ここからどこへ行くべきかは確かです。理想的には、dataitem 値または値自体に基づいて、クラスまたはラベルのタイトルを設定しています。

コードビハインドを作成するなど、これを行うためのより良い方法があるかもしれ<div>ませんが、それを行う方法もよくわかりませんか? ヘルプや提案をいただければ幸いです (NOVICE C#)

編集:私はそれが正しいと思うこの機能を追加しました

protected void FileExists(string url, RepeaterItemEventArgs e)
{
    Label myLabel = (Label)(e.Item.FindControl("divfile"));
    url = "@" + url;
    if (File.Exists(url))
    {
        myLabel.Attributes.Add("class", "green");
    }
    else { myLabel.Attributes.Add("class", "red"); }
}

そして次のラベル

<div class='anj red glyphicon glyphicon-file <%= %> id="dvFile" runat="server" title=<%# DataBinder.Eval(Container.DataItem,"FileName") %>></div>

関数をどのように呼び出すのですか? 私は試した

<%# FileExists(DataBinder.Eval(Container.DataItem,"FileName")) %> 

クラス内ですが、結果の文字列を関数に送信していません。

4

2 に答える 2

1

の型はe.Item.DataItem、リピーターにバインドされている型です。したがって、リストをFooリピーターにバインドし、個々のプロパティにアクセスしたい場合は、type としてFooキャストします。e.Item.DataItemFoo

var myFoo = e.Item.DataItem as Foo
if(myFoo != null && myFoo.Online == "Online")
    //Do something
于 2016-03-08T01:33:25.310 に答える
0
protected void rpDB_item_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        HtmlGenericControl dbOnline = ((HtmlGenericControl)e.Item.FindControl("dbOnline"));
        HtmlGenericControl sfile = ((HtmlGenericControl)e.Item.FindControl("lblfile"));
        //HtmlGenericControl online = ((HtmlGenericControl)e.Item.FindControl("dbOnline"));
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {

            string sonline = (string)(DataBinder.Eval(e.Item.DataItem, "Online/Offline").ToString());
            string myfile = (string)(DataBinder.Eval(e.Item.DataItem,"FileName"));

            if (sonline == "Online")
            {
                sfile.Attributes.Add("class", "green");
                dbOnline.Attributes.Add("class", "led-green");
            }           
        }
    }

これを追加して、それを歩きました。Attributes.Addセクションまで期待されることをしているようです。関連する属性を割り当てていません。それが違いを生む場合、これはネストされたリピーターにあることに再度注意してください。

于 2016-03-21T15:57:28.843 に答える