Добавление строки в сетке из словаря - PullRequest
0 голосов
/ 23 января 2012

У меня есть LinkButton на моем Page1.aspx с полями Ниже приведено изображение page1.aspx. И вид сетки в Page2.aspx .. Когда я нажимаю на кнопку ссылки, страница перенаправляется в Page2.aspx и заполняет вид сетки необходимыми полями ..

**Page1.aspx with the Fields and a LinkButton**

, где обязательные поля

Изображение, Имя = Черная шапка, Название = Топи, Цена = 1200

Код Page1.aspx:

 protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
{
    Dictionary<string, string> OrderDict = new Dictionary<string, string>();
    if (e.CommandName == "orderClick")
    {
        string value = e.CommandArgument.ToString();
        string id = this.ListView1.DataKeys[e.Item.DataItemIndex].Value.ToString();
        OrderDict.Add(id, value);
        Session["Order"] = OrderDict;
        Response.Redirect("Page2.aspx");
        Response.Write(OrderDict);
    }
}

Код Page2.aspx:

protected void Page_Load(object sender, EventArgs e)
{
    Dictionary<string, string> Dictionary = (Dictionary<string, string>)Session["Order"];
    //Regex reg = new Regex(@"\[([^\]]+)\]([^\[]+)");
    if (Dictionary != null)
    {
        GridView1.DataSource = Dictionary;
        //Dictionary = reg.Matches(Dictionary.ToString()).Cast<Match>().ToDictionary(x => x.Groups[1].Value
        //    , x => x.Groups[2].Value.Trim());
        //string slit = Dictionary.s
        this.GridView1.DataBind();
        //this.GridView1.DataSource = Dictionary;
        Response.Write(Dictionary.Values.Count);
    }
}

1 Ответ

0 голосов
/ 23 января 2012

Это первый раз, когда я вижу код, который привязывается к словарю. Вам следует привязать свойство Keys к словарю.

// Change your original line in Page_Load to this... The variable name conflicts with the class name
Dictionary<string, string> orderDictionary = (Dictionary<string, string>)Session["Order"];

// Bind like this:
GridView1.DataSource = orderDictionary.Keys;

См. Словарь (Of TKey, TValue). Свойство ключей

Рассматривали ли вы создание класса, представляющего список элементов, которые вы храните в сеансе? Например:

public class SelectedOrder
{
    public string ID { get; set; }
    public string Value { get; set; }
}

// Then in your ListView ItemCommand in Page1.aspx
var orders = ((List<SelectedOrder>)Session["Order"]) ?? new List<SelectedOrder>();
orders.Add(new SelectedOrder() { ID = id, Value = value });
Session["Order"] = orders;

// And in Page2
List<SelectedOrder> orders = (List<SelectedOrder>)Session["Order"];
if (null != orders) {
    GridView1.DataSource = orders;
    GridView1.DataBind();

    // Rest of code follows...
}

Я думаю, это будет более простой подход в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...